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

标签 mysql arrays cakephp find field

我正在尝试将结果的子集作为 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/

相关文章:

c - 为什么我得到 "array initializer must be an initializer list or string literal"?

php - CakePHP 中的 Acl - 删除此功能

php - CakePHP 和 tinyint 作为 bool 值

php - 如何将 latin1 表转换为具有序列化值的 utf8?

php - 根据用户的 IP 将纬度和经度填充到数据库中

php - 如何对两个数据库的结果进行排序

javascript - 使用Key获取Array对象的值

c# - Powershell 等效于 C# List with Coordinates

php - 如何在不使用 CakePHP 中各处的 using 'view/layout' 语句的情况下保持多个相似的 'if()' 文件干燥?

php - 在php中匹配并访问带有数据库列的字符串