2012-03-04 76 views
2

我覺得我'擊中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:?

是的..是我沒有格式它錯誤地

回答

2

你可以這樣做: 我沒有測試過,因爲我沒有時間重新創建表格,但這是我目前使用的:它只是在您的條件下使用的不同語法。

$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))); 

(我希望我得到了陣列/支架右側的表名和金額:)

+0

天才]! 我很高興你來這裏幫助phpactiverecord = P 你是否是開發人員之一?我會嘗試它,並刪除我對核心類的更改,以查看會發生什麼 – Anther 2012-03-05 15:58:54

+0

不是,而是一個活動用戶(和活動的SO用戶)。我希望能在這個話題上得到一些大量的討論,因爲phpAR的論壇沒有被太多的人訪問:)(並且我更喜歡QA平臺) – Nanne 2012-03-05 16:02:02

+0

我看到了需要做出的改變,但我會對我的黑客固執,因爲我確實希望能夠使用數組輕鬆地將動態需要的字段添加到條件中,而不是使用字符串連接和數組推送。這確實是這個問題的正確答案! – Anther 2012-03-05 16:33:49