在Laravel中显示foreach中的多个查询

时间:2016-09-28 08:04:21

标签: laravel foreach

我有一个需要10个ID的查询,然后我循环使用这些id,使用foreach为每个id执行单独的查询。但是我得到了更多的查询,对于每个循环它也添加了以前的查询,我不明白为什么。我使用Laravel 5。

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

当我获得查询日志时,对于第一个循环,我有一个查询,对于第二个循环,我有两个查询,依此类推。但是,当我只是回显$ id时,它显示的是正确数量的ID。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我建议你使用laravel查询构建器的whereIn()

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

然后你可以通过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();

返回$ groupByQuery;

看到它返回你想要的东西。?

答案 2 :(得分:0)

猜猜你应该添加

unset($query);

每次创建新查询时。

答案 3 :(得分:-1)

尝试使用雄辩的模型:

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