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

Perform query with join and comma separated values in column in Laravel

我有 table orders,其中包含列文件。该列包含文件 ID,它们以逗号分隔。

第二个 table 是 documents

Table 姓名:订单

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

Table 名称:文档

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

目前我有这个查询只查询 orders table 但我也想加入文档所以我可以向客户显示在 file_id 列中连接的文档的名称在 orders

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

你能在这里稍微指导一下吗?

希望对您有用。试一试

$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) 希望它会 return 想要的结果。

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

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")
    ]);