如何在CakePHP中生成MySQL非空条件?
我正试图将结果的子集作为一个virtualField,以便在我的视图中使用。我甚至可能离实现这一目标还有一段距离,但以下是我迄今为止所做的: 我从这个问题开始:这导致了 现在我遇到了一个问题,find语句将(数组)传递到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
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)
$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
)