2016-09-28 60 views
0

我有一個查詢需要10個ID,然後我循環遍歷這些ID,使用foreach爲每個ID執行單獨的查詢。但是我得到了更多的查詢,對於每個循環它也增加了以前的查詢,我不明白爲什麼。我使用Laravel 5.在Laravel的foreach中顯示多個查詢

foreach($data as $id) 
{ 
    $query = (new TestModel)->newQuery(); 
    $query->where('Test.ID', '=', $id); 
} 

當我查詢日誌,對於第一循環我有一個查詢,爲第二循環我有兩個查詢等。但是,當我只是回顯$ id時,它顯示的ID完全正確。

回答

1

我會建議你使用,其中()的laravel查詢生成器

// It will give you all queries 
$allQueries = TestModel::whereIn('id',$data)->get(); 

那麼你可以遍歷throught的foreach讓你查詢

foreach($allQuery as $query) 
{ 
// Here $query will return single object of TestModel 
// do your stuff here. 
} 

對於你的問題是什麼,我們在評論中討論。試試這個

$allQueries = TestModel::whereIn('id',$data)->get(); 
$groupByQuery = collect($allQueries)->groupBy('date')->toArray(); 

return $ groupByQuery;

看到它是否返回你想要的。

+0

謝謝。它的工作 –

+0

,但是這對我來說,爲你的例子工作,但我添加groub和在這種情況下,它工作錯了。我想我需要在foreach中編寫查詢來分組數據並採取我想要的任何方式 –

+0

不,這將組合所有行,但我需要按每個ID的日期分組 –

0

猜你應該添加

unset($query); 

當你創建一個新的查詢每次。

+0

感謝您的回答,但一樣。它在調試 –

0

嘗試使用雄辯的模型:

foreach($data as $id) 
{ 
    $query = TestModel::Where('Test.ID', '=', $id)->get(); 
} 
1

移動你的你的$query實例化你的循環之外。

$query = (new TestModel)->newQuery(); 
foreach($data as $id) 
{ 
    $query->where('Test.ID', '=', $id); 
} 

或者更好的,只是使用whereIn

$query = (new TestModel)->newQuery()->whereIn('Test.ID', $data); 

你甚至都不需要實例化一個新的模式:

$query = TestModel::whereIn('Test.ID', $data); 
+0

顯示多個查詢謝謝,我忘記了在 –