【问题标题】:Joins queries to get multiple data to datatable in laravel连接查询以获取多个数据到 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();

  

以上代码的输出:

我已经拥有的数据表:

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

【问题讨论】:

    标签: javascript php ajax laravel datatable


    【解决方案1】:

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

    【讨论】:

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