在Laravel的列中使用连接和逗号分隔值执行查询

时间:2017-07-18 10:47:28

标签: mysql laravel laravel-query-builder

我有表orders,其中包含列文件。该列保存文件ID,并以逗号分隔。

第二个表是documents

表名:订单

 orders_id | order_details | file_id
 ------------------------------------
     1     | some details  |   1,2    

表名:文件

 id |   name 
 ------------------
  1 | file name
  2 | file2 name2

目前我的查询只查询orders表,但我也想加入文档,这样我就可以向客户展示file_id列中orders列中连接的文档的名称

$docomuntOrders = Order::where('user_id',getCurrentUser()->user_id)
                        ->orderBy('order_id', 'DESC')
                        ->paginate(10);

你能在这里指点一下吗?

2 个答案:

答案 0 :(得分:3)

希望它对你有用。试一试

$docomuntOrders = \DB::table("orders")
            ->select("orders.*",\DB::raw("GROUP_CONCAT(documents.name) as docname"))
            ->leftjoin("documents",\DB::raw("FIND_IN_SET(documents.id,orders.file_id)"),">",\DB::raw("'0'"))
            ->where('user_id',getCurrentUser()->user_id)
            ->groupBy("orders.id")
            ->paginate(10);

如果您尝试dd($docomuntOrders)希望它会返回所需的结果。

答案 1 :(得分:0)

单个用户有多个公司,并且在用户表中的公司ID在一个文件中,以逗号分隔。在这种情况下,这就是解决方案,与您的问题非常相似。

Users::leftJoin("company_info as ci",\DB::raw("FIND_IN_SET(ci.id,users.company_ids)"),">",\DB::raw("'0'"))
    ->groupBy('users.id')
    ->get([
        'users.*',
        \DB::raw("GROUP_CONCAT(ci.company_name) as company_name")
    ]);