加载条件引用另一个表 - Phpactiverecord

时间:2012-03-04 21:51:53

标签: php phpactiverecord

我认为我遇到了phpactiverecord的限制,但需要澄清:

$data = array(
    'conditions' => array(
        'still_in_contest' => 1,
         'contest_month'   => $month,
         '`genres`.`id`'   => $genre, # THIS is the issue.. and an awkward "hack" that 
                                      # I was hoping would work..
     )
     'include' => array('song' => array('artist','genre')),
     'joins'   => array('
           LEFT JOIN songs 
               ON (songs.id = contest_submissions.song_id)
               LEFT JOIN genres 
                   ON (genres.id = songs.genre_id)',
     ),

是否无法简单地将genres.id之类的内容添加到查询中?

phpactiverecord正在将查询设置为:

WHERE `contest_submissions`.`genres`.`id`=?

如果有其他方法仍然可以通过自动加载另一个类似的查询而不用我自己的所有内容来获益吗?

编辑: 我现在的解决方案就是修改phpactiverecord的SQLBuilder类的核心,如果密钥中有一个点,就不要附加表的名称......

EDIT2:

我尝试了你的解决方案Nanne,它没有成功。 Phpactiverecord最终将表名添加到所有内容之前。 :(

$genre = 1
    if($genre)
       $data['conditions']['genres.id'] = $genre;
     $data['conditions']['contest_submissions.still_in_contest'] = 1;
     $data['conditions']['contest_submissions.contest_month'] = $month;

之前已经解决了,因为我把我的黑客入侵了。我是否错误地格式化了这个条件?

EDIT3:

是..是的,我的格式不正确。

1 个答案:

答案 0 :(得分:3)

你可以这样做。 我没有测试它,因为我没有时间重新创建表,但它是我目前使用的:它只是在你的条件中使用的不同语法。

$join   = "LEFT JOIN songs ON (songs.id = contest_submissions.song_id) 
           LEFT JOIN genres ON (genres.id = songs.genre_id)";
$models = \Models\YourModel::all(array( 
                  'joins'     => $join,
                 'conditions' => array('contest_submissions.still_in_contest = ? 
                                    AND contest_submissions.contest_month = ? 
                                    AND genres.id = ?',
                                 1,
                                 $month,
                                 $genre)));

(我希望我得到了表名和数组/括号的数量:)