laravel - Laravel 查询构建器:CONCAT 和 JOIN
问题描述
我有一个如下图所示的数据库,其中包含三个表:
[表格][1]
https://i.stack.imgur.com/G947f.jpg
我需要实现如下表的查询:
<table border=1>
<tr>
<th>codProduto</th><th>codReserva</th><th>codClientes</th>
</tr>
<tr>
<td>1</td><td>2</td><td>20,30,40</td>
</tr>
</table>
我试图做这样的事情:
$test = DB::table('clientes as c')
->leftjoin('reservas as r', 'p.codReserva', '=', 'c.codCliente')
->leftjoin('produtos as p', 'p.codProduto', '=', 'r.codReserva')
->select('p.codProduto','r.codReserva',DB::raw("CONCAT(c.codCliente,', ') as codCliente"))
->get();
dd($test);
有人可以帮我实现吗?太感谢了。我在下面得到了这样的东西
array:3[
0 => {#498
+"codProduto": 1
+"codreserva": 2
+"codCiente": 20,
}]
1 => {#498
+"codProduto": 1
+"codreserva": 2
+"codCiente": 30,
}]
2 => {#498
+"codProduto": 1
+"codreserva": 2
+"codCiente": 40,
}]
但我想得到:
array:1[
0 => {#498
+"codProduto": 1
+"codreserva": 2
+"codCiente": 20,30,40
}]
解决方案
只需像这样使用 group_concat 更改查询:
$test = DB::table('clientes as c')
->leftjoin('reservas as r', 'r.codReserva', '=', 'b.ce_denunciacrime')
->leftjoin('produtos as p', 'p.codProduto', '=', 'r.codReserva')
->select('p.codProduto','r.codReserva',DB::raw("GROUP_CONCAT(c.codCliente,'') as codCliente"))
->limit(1)
->groupBy('p.codProduto','r.codReserva')
->get();
推荐阅读
- python - EAV数据模型中产品的多个类别的Django ModelForm
- windows-subsystem-for-linux - WSL Ubuntu 18 上带有 SOEM 的 EtherCAT
- html - 如何使链接之间的空间在 html 中不可选择?
- node.js - 缓冲区到字符串格式错误的编码(本机 ZLIB 压缩 - Node.js)
- android - 当我开始在搜索栏中输入时,未调用 onQueryTextChange
- javascript - 用一些参数对 findAll 进行续集
- amazon-web-services - AWS S3 | 允许被授权者仅从存储桶下载对象
- python - 如何打印两次相同的随机数?
- java - Java:从缓存的函数和缓存的 BiFunction 实现递归缓存
- c++ - 测试程序未运行