我有一个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()
,因为我正在将此查询连接到前端数据表服务。
答案 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();