我正在尝试作为一个virtualField来获得一个结果子集,以便在我的视图中使用。我甚至可能对我是如何处理这个问题的,但是我已经做了如下的事情:
我从这个问题开始:CakePHP virtualField查找所有非空,这导致了这小小的美。
现在,我遇到了一个问题,find语句将(Array)传递到MySQL中。
我的代码看起来是:
class Transaction extends AppModel {
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->virtualFields['Accounts'] = $this->find("all", array("conditions" => array("account !=" => null)));
}我看到:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
SQL Query: SELECT `Transaction`.`id`, `Transaction`.`name`,
`Transaction`.`person_id`, `Transaction`.`account`, (Array)
AS `Transaction__Accounts` FROM `my_database`.`transactions`
AS `Transaction` WHERE `Transaction`.`person_id` = (2)我也尝试过$this->Transaction->find和"Transaction.account !=",但没有结果。我在(Array)中发现了一些其他问题,但没有一个问题对我的情况有帮助。任何指向正确方向的指示都是很棒的。
发布于 2013-12-08 22:04:17
问题:您的查询结果是一个数组,您告诉为每个包含该数组的查询结果分配一个字段名--虚拟字段只用于包含字符串之类的单级变量。
解决方案:在自身上使用一个join结构,这些条件将返回嵌套的结果集和每个结果。使用CakePHP模型关系执行以下操作:
<?php
class Transaction extends AppModel {
var $hasMany = array(
'Accounts' => array(
'className' => 'Transaction',
'foreignKey' => false,
'conditions' => array('Accounts.account IS NOT NULL')
)
);
}
?>示例输出:
Array(
'Transaction' => array( // transaction data),
'Accounts' => array( // associated transaction data with account set to null
)现在,您可能可以从该结果中收集到,如果从Transaction返回1000行,那么您将得到所有结果(从Accounts嵌套到--每个事务结果)。这远非理想。从这里开始,您可以使联接条件更具体地针对相关的Accounts记录,或者这不是适合您的方法。
其他办法可以是:
Transaction数据库表,隐式查找条件为account is nullTransaction模型中检索这些结果的手动查询,该查询将检索这些结果--,一次,然后是return array_merge($accounts, $transactions)https://stackoverflow.com/questions/20459606
复制相似问题