2013-11-14 21 views
3

我有一個SQL查詢:Laravel 4,其中病情與DB :: select查詢

SELECT summary_table.device_id, WEEKDAY(summary_table.day) as day, AVG(summary_table.shows) as avg_shows 
    FROM (
     SELECT device_id, day, sum(shows) as shows 
     FROM statistics 
     GROUP BY device_id, day 
    ) as summary_table 
    WHERE device_id IN (1,2,3) // Just for example 
    GROUP BY device_id, WEEKDAY(day) 

我應該如何執行此使用Laravel?我把這個查詢放在DB :: select函數中,但是我怎樣才能把所有的ID放在「WHERE device_id IN(?)」的條件中?我試過使用「數組(implode(',',$ var))」但它不起作用。如果我有類似「13,14」的ID,我只能得到id = 13的結果。

所以問題是如何放置而不是「?」 ID數組?

+0

顯示到目前爲止的代碼 – Damodaran

回答

1

Laravel正在使用PDO庫。可悲的是,與PDO綁定並不適用於WHERE IN。你可以閱讀一下here.

所以,你所要做的就是把準備串在您的查詢是這樣的:

"(...) 
    WHERE device_id IN (".array(implode(',', $var)).") 
    (...)" 
+0

我想過這個問題。唯一的麻煩是防止SQL注入。我一直信任laravels函數,如 - > where()。我應該通過$ var循環並將其轉換爲像int(int)$ item之類的int,然後再將它放入implode中? – Victor

+0

是的,你是正確的與SQL注入危險。您應該將所有$ var元素轉換爲整數。 – Kasyx

+0

轉換的最佳選擇是'intval'在我看來:http://us1.php.net/intval – Kasyx

8

看看該文檔在這裏,向下滾動到「使用凡與陣列「:

http://four.laravel.com/docs/queries

whereIn的方法有一個數組,所以傳遞$var直接,無需爆。你試過

->whereIn('device_id', $var) 
+0

我可以寫DB :: select('..') - > where在一起嗎? – Victor

+0

該頁面上的文檔是用於查詢生成器,而不是手動sql查詢 – jszobody

+0

那麼我使用手動sql查詢。將查詢放入查詢生成器中似乎有點困難? – Victor

0
"(...) 
    WHERE device_id IN (".implode(',', $var).") 
    (...)"