laravel连接查询中用逗号分隔的列值

时间:2018-12-24 03:49:41

标签: sql laravel laravel-query-builder

我有一个laravel Webapp,其中的数据库是通过下表构建的。关系是transactions hasmany loading_hire_agreements via lhas_transactions

Table name: transactions 
| id | date              | number |
|----|-------------------|--------|
| 1  | 12:00:00 00:00:00 | TRN#1  |
| 2  | 10:00:00 00:00:00 | TRN#2  |

Table name: loading_hire_agreements
| id | number |
|----|--------|
| 1  | JY1001 |
| 2  | JY1002 |
| 3  | JY1003 |

Table name: lhas_transactions
| transction_id | lha_id |
|---------------|--------|
| 1             | 1      |
| 1             | 2      |
| 2             | 3      |

我想使用laravel的DB:table()->join(\* any relevant join *\)写一个join语句,以便生成以下输出。

| transactions.id  | transactions.number | loading_hire_agreements.number |
|------------------|---------------------|--------------------------------|
| 1                | TRN#1               | JY1001, JY1002                 |
| 2                | TRN#2               | JY1003                         |

我“必须”使用DB:table(),因为我正在将此查询连接到前端数据表服务。

1 个答案:

答案 0 :(得分:4)

尝试使用GROUP_CONCAT并连接所有三个表:

$users = DB::table('transactions')
         ->join('lhas_transactions as lt', 'transactions.id', '=', 'lt.transaction_id')
         ->join('loading_hire_agreements as lha', 'lt.lha_id', '=', 'lha.id')
         ->select(DB::raw('transactions.id, transactions.number, GROUP_CONCAT(lha.number ORDER BY lha.id) AS agreements'))
         ->groupBy('transactions.id', 'transactions.number')
         ->get();