CakePHP可容纳的条件不限制结果?

Chr*_*ris 3 cakephp containable

我正试图在分类列表中找到用户的杂货.关联是Category hasMany Item hasMany User through Grocery.我正在使用可包含行为,并没有过滤掉所有其他Grocery.它基本上返回每个项目.

我的控制器功能:

function showlist() {
$categories = $this->Category->find('all', array(
    'contain' => array(
        'Item' => array(
            'Grocery' => array(
                'conditions' => array(
                    'Grocery.user_id =' => $this->Auth->user('id')
                )
            )
        )
    )
));
Run Code Online (Sandbox Code Playgroud)

返回的数组:

Array
(
    [0] => Array
        (
            [Category] => Array
                (
                    [id] => 10
                    [parent_id] => 
                    [name] => Dairy
                    [lft] => 1
                    [rght] => 6
                )

            [Item] => Array
                (
                )

        )

[1] => Array
    (
        [Category] => Array
            (
                [id] => 11
                [parent_id] => 10
                [name] => Milk
                [lft] => 2
                [rght] => 3
            )

        **[Item] => Array
            (
            )**

    )

[2] => Array
    (
        [Category] => Array
            (
                [id] => 12
                [parent_id] => 10
                [name] => Cheese
                [lft] => 4
                [rght] => 5
            )

        [Item] => Array
            (
            )

    )

[3] => Array
Run Code Online (Sandbox Code Playgroud)

我不想返回任何没有Grocery(ItemUser)的Item数组.


这有效,但现在它只能展示.我需要它来显示该嵌套数组中的一个类别的所有项目.

它显示:

Array
(
[0] => Array
    (
        [Category] => Array **<--This could be the same category as**
            (...)

        [Item] => Array
            (...)

        [Grocery] => Array
            (...)
    )
[1] => Array
    (
        [Category] => Array **<--This**
            (...)

        [Item] => Array
            (...)

        [Grocery] => Array
            (...)
    )
[2]...
Run Code Online (Sandbox Code Playgroud)

我需要它:

Array
(
[0] => Array
    (
        [Category] => Array 
            (...
            [Item] => Array
            (...)

            [Item] => Array
            (...)
            )
    )
[1] => Array
    (
        [Category] => Array
            (...)

        [Item] => Array
            (...)
    )
[2]...
Run Code Online (Sandbox Code Playgroud)

甚至不需要Grocery数组,只需通过它们搜索标准.

Dav*_*ave 6

您无法根据Contain中的条件限制主模型的结果.当您使用时contain(),它实际上会创建多个查询 - 这使您无法根据所包含的条件进行限制.

要解决此问题,您需要使用JOIN [请参阅CakePHP连接表]而不是包含.