首页 > 解决方案 > 连接查询以获取多个数据到 laravel 中的数据表

问题描述

我想在数据表的一列中显示一些多个值。我加入了两个表来显示数据表中的值。它包括客户数据,并且客户拥有从另一个连接查询中获取数据的多项服务。我如何将这些组合在一起以根据数据表中的每个客户显示多个服务值。我是 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();

  

上述代码的输出:

在此处输入图像描述

我已经拥有的数据表:

在此处输入图像描述

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

标签: javascriptphpajaxlaraveldatatable

解决方案


你可以使用 MySQL 的GROUP_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;
}

推荐阅读