【问题标题】:cakephp contain association conditions issuecakephp 包含关联条件问题
【发布时间】:2012-10-31 18:28:35
【问题描述】:

我有以下关联

后->主要->次要

$results = $this->Post->find('all', array(
    'conditions' => array(
        'Post.post_id =' => 2,
        'Primary.secondary_id !=' => null
    ),
    'contain' => array(
        'Primary' => array(
            'Secondary' => array(
                'conditions' => array('Secondary.short_code =' => 'code')
            )
        )
    )
));

返回这个。

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [created] => 2012-10-29 09:48:29
                    [modified] => 2012-10-29 09:48:29
                )

            [Primary] => Array
                (
                    [id] => 3
                    [secondary_id] => 6
                    [Secondary] => Array
                        (
                            [id] => 6
                            [short_code] => code
                            [created] => 2012-10-31 11:19:56
                            [modified] => 2012-10-31 11:20:03
                        )

                )

        )

但是当我改变时

'conditions' => array('Secondary.short_code =' => 'code')

'conditions' => array('Secondary.short_code !=' => 'code')

当我不想要它时,它仍然返回主记录。

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [created] => 2012-10-29 09:48:29
                    [modified] => 2012-10-29 09:48:29
                )

            [Primary] => Array
                (
                    [id] => 3
                    [secondary_id] => 6
                    [Secondary] => Array
                        (
                        )

                )

        )

【问题讨论】:

  • 你到底想完成什么?
  • 我想限制结果返回。 cakephp 可包含的行为不这样做吗? book.cakephp.org/1.3/view/1323/Containable
  • 然后查看 Dave 的答案。执行查询后,可包含用作限制/格式化结果数组的便捷工具。您正在寻找应用于查询执行的限制/联接。
  • @bbb: from bakery - “这种模型行为允许您过滤和限制模型查找操作。使用 Containable 将帮助您减少数据库不必要的磨损,提高速度和应用程序的整体性能。” 因此,它不会在运行查询后进行过滤,而是在数据库上运行所需的查询并过滤/格式化结果,从而减少数据库的负载。

标签: cakephp


【解决方案1】:

很难确切知道您希望达到什么目标,但我认为这听起来像是您试图根据“次要”模型的条件来限制“主要”结果。

如果是这种情况,您将需要使用 joins() 而不是 contain()

原因:当您使用CakePHP's Containable Behavior 时,它实际上会进行单独的查询,然后将结果组合起来,然后再将数据返回给您。这样做在很多方面都很棒,但它不允许您根据针对其子级的条件来限制父级结果。

为此,只需使用joins()。 (创建 MySQL JOIN 的 CakePHP 语法)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2012-02-11
    相关资源
    最近更新 更多