【问题标题】:Multiple Find Query in single database connection Laravel单个数据库连接 Laravel 中的多个查找查询
【发布时间】:2019-07-24 11:24:47
【问题描述】:

试图提高 Laravel 查询的性能。使用循环对单个模型进行多个查找操作,但尝试使其使用单个数据库连接实例。

$departments = [];

foreach ($this->departments_only as $department) {
    array_push($departments, Department::find($department));
}

return $departments;

没有错误。但只是想要更好的表现。

【问题讨论】:

    标签: php laravel performance eloquent


    【解决方案1】:

    我可以看到 departments_only 是 id 数组,所以你可以使用 whereIn

    $departments = Department::whereIn('id', $this->departments_only)->get();
    

    这将返回 departments 的集合。

    【讨论】:

    • 工作正常。感谢负载
    【解决方案2】:

    对于这些情况,我使用这个库l5-repository

    然后去做:

    $myArray = [1,2,3,4];
    
    $result = $this->repository->scopeQuery(function ($query) use ($myArray) {
                return $query
                    ->whereIn("departament_id", $myArray);
            })->all();
    
    return $result
    

    或者使用原始查询和纯 Laravel:

    $myArray = [1,2,3,4,5];
    
    $result = DB::table('departments')
                    ->selectRaw('departament_id in (?)', $myArray)
                    ->get();
    

    【讨论】:

    • php Department::find($this->departments_only); 效果最好!
    【解决方案3】:

    如果$this->departments_only 在数组中只有 id,那么你可以使用

    Model::whereIn('column','array')->get();
    

    更多参考请访问https://laravel.com/docs/5.8/queries#where-clauses

    或者使用 DB 对象作为,

    DB::statement('SELECT * FROM table_name WHERE column_name IN ('"array_of_ids"')');
    

    【讨论】:

      猜你喜欢
      • 2019-06-27
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多