【问题标题】:Laravel pass list parameters (columns) in select query选择查询中的 Laravel 传递列表参数(列)
【发布时间】:2019-07-11 00:40:40
【问题描述】:

我使用三个表 sparepartscategoriesparameter 和 YajraDatatables。

我的控制器动作是:

    public function anyData()
    {
        $spareparts_param_list = Sparepart::all();
        $list='';
        foreach ($spareparts_param_list as $value) {
            foreach ($value->category->parameter as $par_list) {
                $list .=  $par_list->Name.',';
            }
        }
        $spareparts = Sparepart::
            join('cars', 'spareparts.car_id', '=', 'cars.id')
            ->select(['spareparts.id', 'cars.Brend', 'spareparts.Model', $list]);
        $datatables = app('datatables')->of($spareparts);

        return $datatables->make();
    }

我的数组列表$list打印颜色、类型、轮胎、等参数。 如何在选择查询中传递 $list 数组?

【问题讨论】:

    标签: php arrays laravel parameter-passing yajra-datatable


    【解决方案1】:

    你可以使用whereIn:

    public function anyData()
    {
        $spareparts_param_list = Sparepart::all();
        $list = [];
        foreach ($spareparts_param_list as $value) {
            foreach ($value->category->parameter as $par_list) {
                $list[] = $par_list->Name;
            }
        }
        $spareparts = Sparepart::
            join('cars', 'spareparts.car_id', '=', 'cars.id')
            ->whereIn('Name', $list)
            ->select(['spareparts.id', 'cars.Brend', 'spareparts.Model']);
        $datatables = app('datatables')->of($spareparts);
    
        return $datatables->make();
    }
    

    你可以运行这个原始的Mysql 命令:

    select sp.id as sp_id, sp.model as sp_model, c.brend as car_brend, json_arrayagg(p.name) as p_name
    from spareparts as sp
    join cars as c on sp.car_id=c.id
    join categories as cat on sp.category_id=cat.id
    join parameters as p on cat.id=p.category_id
    group by sp.model;
    

    上面的命令会给你如下的结果:

    1 | Audi A6 door | Audi A6 | ["color", "window"]

    最后一列将是与每个类别相关的所有参数的 json 列。

    【讨论】:

    • 没关系。但是,每个部分都有自己的类别,有自己的参数。例如,部件Audi A6 door(表备件)有门类(表类),门有参数(表参数),如window,color,etc.。这些参数的名称作为列添加到备件表中,我希望这些参数的名称通过 $list 变量显示在选择查询中
    • 我添加了一个原始的 Mysql 查询,请检查它。 @dbudimir
    【解决方案2】:

    您可以使用 whereIn(),如下所示:

    $users = DB::table('users')
                    ->whereIn('id', [1, 2, 3])
                    ->get();
    

    文档 - https://laravel.com/docs/5.7/queries#where-clauses

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多