find('all')条件包含level-2相关模型的字段

时间:2014-02-01 11:16:20

标签: cakephp

我设置了我的模型,并且以下find()返回下面的数组。

查询:

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

结果:

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添加一个条件。 我试着添加

'Teamstarter.Fflteam.league_id' => $league

到conditions数组,但后来我得到一个sql错误,找不到列'Teamstarter.Fflteam.league_id'。 如何添加引用更深层次字段的条件。

自找到模型后,应正确设置协议。

感谢您的帮助。

修改

下面的建议只删除了Fflteam部分

'contain' => array(
    'Teamstarter.Fflteam' => array(
        'conditions' => array(
           'Fflteam.league_id' => $league
        )
    )
)

结果:

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部分。

2 个答案:

答案 0 :(得分:2)

我在另一个帖子中找到了解决方案:

CakePHP 2.x containable behavior conditions on deep associations

这里有链接:

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

这里是我使用的代码:

$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 :(得分:0)

尝试这样的事情:

'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/