查询生成器 Laravel 左连接
Posted
技术标签:
【中文标题】查询生成器 Laravel 左连接【英文标题】:Query Builder Laravel Left Join 【发布时间】:2022-01-20 13:56:11 【问题描述】:我正在使用 laravel 8,我创建了一个查询构建器来进行左连接,当 laravel 执行查询时显示错误,但在 SQL Server MS 中执行正确
SQLSTATE[42S22]:[Microsoft][ODBC Driver 17 for SQL Server][SQL 服务器]列名“2”无效。 (SQL: select [a].[id] as [id1], [b].[id] 作为 [id2]、[a].[reg]、[a].[parte]、[a].[ubiclinea]、 [a].[描述],[a].[numConteo] 作为 [conteo1],[a].[cantidad] 作为 [cantidad1],[a].[counter] 作为 [contador1],[a].[created_at] 作为 [created1], [b].[numConteo] 作为 [conteo2], [b].[cantidad] 作为 [cantidad2], [b].[counter] as [contador2], [b].[created_at] as [created2] from [directosCount] as [a] left join [directosCount] as [b] 在 [a].[reg] = [b].[reg] 和 [b].[numConteo] = [2] 和 [b].[deleted_at] 为空,其中 [a].[numConteo] = 1 且 [a].[deleted_at] 为空)
这是显示的错误
但我复制查询并在 SQL Server 中执行,它可以工作
我在 laravel 中的查询是这样的
DB::table('directosCount as a')
->leftJoin('directosCount as b', function($join)
$join->on('a.reg', '=', 'b.reg');
$join->on('b.numConteo', '=', '2')->whereNull('b.deleted_at');
)
->select('a.id as id1', 'b.id as id2', 'a.reg', 'a.parte', 'a.ubiclinea', 'a.descripcion', 'a.numConteo as conteo1', 'a.cantidad as cantidad1', 'a.counter as contador1', 'a.created_at as created1', 'b.numConteo as conteo2', 'b.cantidad as cantidad2', 'b.counter as contador2', 'b.created_at as created2')
->where('a.numConteo', '1')
->whereNull('a.deleted_at')
->get();
希望有人可以帮助我
【问题讨论】:
join->on
将列而不是列与值进行比较,这需要where
来比较我假设的值
哦,好的。谢谢你的作品
@gutiec - 很高兴知道您解决了问题,发布您自己问题的答案,这样它就不会显示为未回答。
【参考方案1】:
我认为这应该在加入之外
$join->on('b.numConteo', '=', '2')->whereNull('b.deleted_at');
请将on
改为where
->where('b.numConteo', '=', '2')->whereNull('b.deleted_at');
【讨论】:
【参考方案2】:您的联接中有 2 个 on
语句。试试这个
DB::table('directosCount as a')
->leftJoin('directosCount as b', function($join)
$join->on('a.reg', '=', 'b.reg')
->where('b.numConteo', '=', '2')
->whereNull('b.deleted_at');
)
->select('a.id as id1', 'b.id as id2', 'a.reg', 'a.parte', 'a.ubiclinea', 'a.descripcion', 'a.numConteo as conteo1', 'a.cantidad as cantidad1', 'a.counter as contador1', 'a.created_at as created1', 'b.numConteo as conteo2', 'b.cantidad as cantidad2', 'b.counter as contador2', 'b.created_at as created2')
->where('a.numConteo', '1')
->whereNull('a.deleted_at')
->get();
【讨论】:
以上是关于查询生成器 Laravel 左连接的主要内容,如果未能解决你的问题,请参考以下文章
具有多态连接的 Laravel 查询生成器在 SQLite 上不起作用