如何在CakePHP中生成MySQL非空条件?

如何在CakePHP中生成MySQL非空条件?,mysql,arrays,cakephp,find,field,Mysql,Arrays,Cakephp,Find,Field,我正试图将结果的子集作为一个virtualField,以便在我的视图中使用。我甚至可能离实现这一目标还有一段距离,但以下是我迄今为止所做的: 我从这个问题开始:这导致了 现在我遇到了一个问题,find语句将(数组)传递到MySQL中 我的代码如下所示: class Transaction extends AppModel { public function __construct($id = false, $table = null, $ds = null) { parent::__co

我正试图将结果的子集作为一个virtualField,以便在我的视图中使用。我甚至可能离实现这一目标还有一段距离,但以下是我迄今为止所做的:

我从这个问题开始:这导致了

现在我遇到了一个问题,find语句将(数组)传递到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!=”
,但没有成功。我发现了(数组)的一些其他问题,但没有一个对我的情况有帮助。任何指向正确方向的指针都很好。

问题:您的查询结果是一个数组,您告诉SQL为包含该数组的每个查询结果分配一个字段名-虚拟字段只包含字符串等单级变量

解决方案:使用一个
join
结构,将这些条件与每个结果一起返回一个嵌套的结果集。用于执行此操作:

<?php    
class Transaction extends AppModel {
    var $hasMany = array(
        'Accounts' => array(
            'className' => 'Transaction',
            'foreignKey' => false,
            'conditions' => array('Accounts.account IS NOT NULL')
        )
    );
}    
?>
现在,您可能可以从该结果中收集到,如果您从
事务
返回1000行,您将从
帐户
中得到嵌套在每个事务结果中的所有结果。这远非理想。从这里开始,您可以使联接条件更加特定于目标相关的
帐户
记录,或者这不是适合您的方法

其他办法可以是:

  • 帐户模型,使用
    事务
    数据库表,隐式查找条件为
    帐户为空
  • 手动查询以在您的
    交易
    模型中检索这些结果,该模型将检索这些结果一次,然后您将
    返回数组\u merge($accounts,$transactions)

我想我现在要在控制器中抓取这个。。。但我将把这个问题留给你,因为它似乎是有效的。我将尝试这些(特别是最后一个),并让你知道会发生什么。至少解释得很好@RandyHall如果是我,我会走后发现的路我现在正在尝试。在不写全部内容的情况下,will
$this->find(“all”、array(“conditions”=>array(“not”=>array(“account”=>null)))向我提供帐户所在的所有记录!=null,或仅原始$results的子集?这是一个单独的查询,因此不会受原始查询条件的影响。如果您遇到问题,请深入一点,只使用
$this->query(“SQL HERE”)
-但您不应该遇到问题。我的猜测是使用
$this->query('SQL HERE')
进行手动查询,因为find回调中的
$this->find()
可能会触发另一个
afterFind
,并创建一个无休止的循环
$this->query()
是手动的,但可能没有相同的效果。
Array(
    'Transaction' => array( // transaction data),
    'Accounts' => array( // associated transaction data with account set to null
)