连接查询以获取多个数据到 laravel 中的数据表

Posted

技术标签:

【中文标题】连接查询以获取多个数据到 laravel 中的数据表【英文标题】:Joins queries to get multiple data to datatable in laravel 【发布时间】:2020-04-10 17:46:51 【问题描述】:

我想在数据表的一列中显示一些多个值。我加入了两个表来显示数据表中的值。它包括客户数据,并且客户拥有从另一个连接查询中获取数据的多项服务。我如何将这些组合在一起以根据数据表中的每个客户显示多个服务值。我是 laravel 新手,感谢您的帮助!

加入查询以将数据传递到没有多个值的数据表:

    public function getAppointmentData(Request $request)
    

        $getData = DB::table('customers')
        ->join('jobs', 'jobs.id', '=', 'customers.id')
        ->select('jobs.id', 'user_type','firstname','lastname', 'vehiclemodel', 'date', 'time', 'payment_status', 'amount')->get();

        $datatable = DataTables::of($getData)->make(true);
        return $datatable;
    

根据每个客户获取多个服务值:

        $getData = DB::table('customers')
        ->join('customer_service', 'customer_service.customer_id', '=', 'customers.id')
        ->join('services_info', 'services_info.id', '=', 'customer_service.id')
        ->select('customer_id','service_id','service')
        ->get();

  

以上代码的输出:

我已经拥有的数据表:

我希望数据表中的服务列根据每个客户显示多个服务值。

【问题讨论】:

【参考方案1】:

你可以使用 mysqlGROUP_CONCAT()

功能:

public function getAppointmentData(Request $request)

    $services = DB::table('customers')
        ->join('customer_service', 'customer_service.customer_id', '=', 'customers.id')
        ->join('services_info', 'services_info.id', '=', 'customer_service.id')
        ->selectRaw("
         customer_id,
         GROUP_CONCAT(service) as services_list
        ")
        ->groupBy('customer_id')
        ->toSql();

    $getData = DB::table('customers')
    ->join('jobs', 'jobs.id', '=', 'customers.id')
    ->join(DB::raw("($services as services)"), 'services.customer_id', '=', 'customers.customer_id')
    ->select('jobs.id', 'user_type','firstname','lastname', 'vehiclemodel', 'date', 'time', 'payment_status', 'amount', 'services_list')->get();

    $datatable = DataTables::of($getData)->make(true);
    return $datatable;

【讨论】:

如何将连接文本显示为一个数据表列中的列表? 默认情况下 - MySQL 将使用分隔符连接字符串:,。您可以将其更改为几乎任何您想要的字符。然后就是在前端解析它,因为你可以使用javascript's split 我想将上面的代码输出与join结合起来,在getAppointmentData方法中传递选择查询以显示在数据表中 然后使用$getData 作为sub-query。将get() 替换为toSql() 并像这样添加:->join(DB::raw($getData), ...) 我已经编辑了我的答案,但到目前为止我无法告诉你是否没有语法错误。

以上是关于连接查询以获取多个数据到 laravel 中的数据表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel多个数据库同时使用所有[重复]

在一个查询中使用具有多个关联数组的 laravel eloquent 获取数据

如何使用 Laravel Eloquent 在不同服务器上的多个数据库之间执行连接查询?

如何在 laravel 中使用查询生成器根据 id 从多个表中获取数据

如何在查询构建器 laravel 上从每个组中获取多个数据

从 Laravel 中的坐标获取半径内的用户