2016-09-28 57 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

显示多个查询谢谢,我忘记了在 –