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/