gpt4 book ai didi

mysql - 如何在 CakePHP 中生成 MySQL IS NOT NULL 条件?

转载 作者:可可西里 更新时间:2023-11-01 08:17:38 26 4
gpt4 key购买 nike

我正在尝试将结果的子集作为 virtualField 在我的 View 中使用。我什至可能离我如何处理这个问题还有很远的距离,但这是我到目前为止所做的:

我从这个问题开始:CakePHP virtualField find all not null这导致 this little beauty .

现在我遇到一个问题,即 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) 的其他一些问题,但没有一个对我的情况有帮助。任何指向正确方向的指示都会很棒。

最佳答案

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

解决方案:在自身上使用join 结构,这些条件将返回一个嵌套的结果集以及您的每个结果。使用 CakePHP's model relationships这样做:

<?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 记录,否则这不适合您。

其他方法可能是:

  • Accounts 模型,使用Transaction 数据库表,隐式查找条件是account is null
  • 手动查询以在 afterFind() method 中检索这些结果Transaction 模型,它将检索这些结果一次,然后您将返回 array_merge($accounts, $transactions)

关于mysql - 如何在 CakePHP 中生成 MySQL IS NOT NULL 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com