【问题标题】:Using Containable behavior to filter results in Cakephp 2.2.4在 Cakephp 2.2.4 中使用 Containable 行为过滤结果
【发布时间】:2013-01-09 18:55:36
【问题描述】:

我正在使用可包含的行为,我的 find('all') 的结果是:

array(
    (int) 0 => array(
        'User' => array(
            'id' => '106',
            'email' => 'daje@daje.it',
            'pwd' => '0433c024cb08be13000d59a347e640482843f46f177e95749dc6599c259617fd3491dcb940b47693cbbc7f65a2cc5ef62deca2e600c1be133ad54170f7d1fbd1',
            'role_id' => '3',
            'active' => '1'
        ),
        'Lead' => array(
            'id' => '6'
        ),
        'Estimate' => array(
            (int) 0 => array(
                'lead_id' => '6',
                'Estimate' => array(
                    (int) 0 => array(
                        'TOT_count' => '2'
                    )
                )
            )
        )
    )
)

我需要计算领先的估计数。

总数 (2) 是正确的,但我看到嵌套的“估计”数组,为什么?

我想得到的结果是:

array(
    (int) 0 => array(
        'User' => array(
            'id' => '106',
            'email' => 'daje@daje.it',
            'pwd' => '0433c024cb08be13000d59a347e640482843f46f177e95749dc6599c259617fd3491dcb940b47693cbbc7f65a2cc5ef62deca2e600c1be133ad54170f7d1fbd1',
            'role_id' => '3',
            'active' => '1'
        ),
        'Lead' => array(
            'id' => '6'
        ),
        'Estimate' => array(
          'TOT_count' => '2'
        )
    )
)

这是发现:

$options = array(
                    'contain' => array(
                        'User',
                        'Estimate' => array(
                            'fields' => 'COUNT(*) AS TOT_count'                             
                        )   
                    ),
                    'conditions' => array('Lead.id' => 6),
                    'fields' => 'User.*',                           
                    'limit' => 1

                );

    debug($this->Lead->find('all', $options));

我该怎么做? 谢谢!

【问题讨论】:

    标签: php cakephp cakephp-2.0


    【解决方案1】:

    当您使用“自定义”AS 语句时,在您的情况下为 TOT_count,Cake 将始终将其放入名为 0 的结果键中。您可以通过在模型中将TOT_count 定义为virtualField 来避免这种情况。这样,它将直接嵌套在结果集中的模型名称下。

    其次,lead_id 被强制检索,因为“需要”与Lead 模型进行连接。如果没有那条信息,它就无法正确检索所有数据。

    【讨论】:

    • 很好的解释!谢谢
    • 每当您在查找中使用AS 时,它都不会这样做。当您没有正确使用它时,它会执行此操作。 virtualFields 存在是有原因的
    • @dogmatic69 哦,当然!我以前用过它们,所以我应该记得。感谢您指出这一点,我已经更新了答案以更好地反映正确的做法。
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多