【问题标题】:Showing multiple queries in foreach in Laravel在 Laravel 的 foreach 中显示多个查询
【发布时间】:2016-09-28 08:04:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: laravel foreach


    【解决方案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;

    看看它会返回你想要的吗?

    【讨论】:

    • 但这确实对我有用,因为你的例子正在工作,但我正在添加 groub,在这种情况下它工作错误。我认为我需要在 foreach 中编写查询以对数据进行分组并获取随心所欲
    • 不,这将为所有行分组,但我需要按每个 ID 的日期分组
    • 如果你要获取 TestModel::where('id',$id)->get();那么它将返回单个结果,对吗?但是 groupBy 用于多个结果,例如数组或对象数组,那么您希望如何为单个结果实现它。?
    • @LusineMartirosyan 试试这个。如果它不起作用,那么您可以通过 vikash@evibe.in 将您的数据库表架构和您的确切问题通过电子邮件发送给我
    【解决方案2】:

    $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);
    

    【讨论】:

      【解决方案3】:

      猜你应该添加

      unset($query);
      

      当您每次都创建一个新查询时。

      【讨论】:

      • 感谢您的回答,但还是一样。它在调试中显示多个查询
      【解决方案4】:

      尝试使用 eloquent 模型:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-15
        • 1970-01-01
        相关资源
        最近更新 更多