我有一个需要10个ID的查询,然后我循环使用这些id,使用foreach为每个id执行单独的查询。但是我得到了更多的查询,对于每个循环它也添加了以前的查询,我不明白为什么。我使用Laravel 5。
foreach($data as $id)
{
$query = (new TestModel)->newQuery();
$query->where('Test.ID', '=', $id);
}
当我获得查询日志时,对于第一个循环,我有一个查询,对于第二个循环,我有两个查询,依此类推。但是,当我只是回显$ id时,它显示的是正确数量的ID。
答案 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();
}