关于cakephp:find(\\’all \\’)条件,其中包含与2级关联的模型的字段

find('all') conditions containing field of level-2 associated model

我建立了模型,下面的find()返回下面的数组。

查询:

1
2
3
4
5
6
7
find('all', array(
    'conditions' => array(
        'Teamstarter.season' => $season),
    'contain' => array(
        'Teamstarter.Fflteam')
    )
);

结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Array
(
    [0] => Array
        (
            [Score] => Array
                (
                    [id] => 1
                    [teamstarter_id] => 1
                    [roster_id] => 1
                    [score] =>
                    [position] => QB
                )

            [Teamstarter] => Array
                (
                    [id] => 1
                    [season] => 2013
                    [gameday] => 1
                    [fflteam_id] => 1
                    [is_flex] => 0
                    [Fflteam] => Array
                        (
                            [id] => 1
                            [user_id] => 1
                            [active] => 1
                            [name] => testteam11
                            [league_id] => 1
                        )

                )

        )

现在,我想为Fflteam模型中的League_id添加一个条件。
我试图添加

1
'Teamstarter.Fflteam.league_id' => $league

到conditions数组,但是随后出现一个SQL错误,找不到列" Teamstarter.Fflteam.league_id"。
如何添加引用更深层次字段的条件。

由于找到了模型,因此应该正确设置关联。

感谢您的帮助。

编辑

以下建议仅删除了Fflteam部分

1
2
3
4
5
6
7
'contain' => array(
    'Teamstarter.Fflteam' => array(
        'conditions' => array(
           'Fflteam.league_id' => $league
        )
    )
)

结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Array
(
[0] => Array
    (
        [Score] => Array
            (
                [id] => 1
                [teamstarter_id] => 1
                [roster_id] => 1
                [score] =>
                [position] => QB
            )

        [Teamstarter] => Array
            (
                [id] => 1
                [season] => 2013
                [gameday] => 1
                [fflteam_id] => 1
                [is_flex] => 0
                [Fflteam] => Array
                    (
                    )

            )

    )

但是我不希望它找到整个数组项。例如,在这种情况下,如果League_id为2,则数组不仅应为Fflteam部分,而且应为空。


我在另一个线程中找到了解决方案:

CakePHP 2.x在深度关联上的可容纳行为条件

这里是其中的链接:

http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations

这是我使用的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$this->unbindModel(array(
    'belongsTo' => array('Teamstarter')
));

$this->bindModel(array(
    'hasOne' => array(
        'Teamstarter' => array(
            'foreignKey' => false,
            'conditions' => array('Teamstarter.id = Score.teamstarter_id')
        ),
        'Fflteam' => array(
            'foreignKey' => false,
            'conditions' => array('Fflteam.id = Teamstarter.fflteam_id')
        )
)));

find('all', array(
    'conditions' => array(
        'Teamstarter.season' => $season,
        'Fflteam.league_id' => $league),
    'contain' => array(
        'Teamstarter',
        'Fflteam')
));

尝试这样:

1
2
3
4
5
6
7
'contain' => array(
    'Teamstarter.Fflteam' => array(
        'conditions' => array(
           'Fflteam.league_id' => $league
        )
    )
),

或阅读出色的文章:http://nuts-and-bolts-of-cakephp.com/2008/09/05/example-of-cakephps-containable-for-deep-model-bindings/