我认为我遇到了 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 类的核心,如果键中有一个点,则不附加表的名称...
编辑2:
我尝试了您的解决方案 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;
它之前解决了,因为我保留了我的 hack。我是否错误地格式化了条件?
编辑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)));
(我希望我得到了正确的表名和数组/括号的数量:)
关于php - 引用另一个表的加载条件 - Phpactiverecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559156/