如何将此 SQL 转换为 Laravel Query Builder 查询?

Posted

技术标签:

【中文标题】如何将此 SQL 转换为 Laravel Query Builder 查询?【英文标题】:How to turn this SQL into a Laravel Query Builder query? 【发布时间】:2014-04-10 23:34:24 【问题描述】:

我在 SQL 中有以下查询可以完美运行,但我无法让它在 Laravel 的查询构建器中运行。这是 SQL:

SQL

select count(listings_queue.mls_listing_id) from listings_queue
INNER JOIN listings
ON `listings_queue`.`mls_listing_id` = `listings`.`mls_listing_id`
WHERE `listings`.`mls_id`=`listings_queue`.`mls_id`
AND `listings`.`city`=`listings_queue`.`city`

Laravel 查询构建器

$count = DB::table('listings_queue')
->join('listings', function($join)

    $join->on('listings_queue.mls_listing_id', '=', 'listings.mls_listing_id');
)
->where('listings.mls_id','=','listings_queue.mls_id')
->where('listings.city', '=', 'listings_queue.city')
->count();

这会产生 0 的计数,但上面的 SQL 会产生 11,550 行。

如果我使用 Laravel 查询生成器并使用 toSql();最后,我得到:

toSql();在 Laravel 中

select * from `listings_queue`
inner join `listings`
on `listings_queue`.`mls_listing_id` = `listings`.`mls_listing_id`
where `listings`.`mls_id` = ?
and `listings`.`city` = ?

这里的疯狂之处在于原始 SQL 输出除了 ?绑定。这可能是问题吗?我不明白为什么我的查询生成器查询与顶部的原始 SQL 在同一数据库上运行会产生不同的结果。

另一个线索是,如果我在 laravel 查询构建器查询中删除 where 子句,我会得到结果。

我在其他地方问过这个问题,但没有很好地解释,所以在这里。非常感谢您提供的任何帮助!

【问题讨论】:

我不知道 1% laravel 但我可以看到它在右边期待一个对象或者可以看作是一个 laravel 错误。 我相信这只是绑定。不过不知道。 【参考方案1】:

像这样删除闭包:

$count = DB::table('listings_queue')
->join('listings', 'listings_queue.mls_listing_id', '=', 'listings.mls_listing_id')
->where('listings.mls_id','=','listings_queue.mls_id')
->where('listings.city', '=', 'listings_queue.city')
->count();

【讨论】:

【参考方案2】:

试试这个多重条件的加入

$count = \DB::table('listings_queue')
->select('listings_queue.*')
->distinct()
->join('listings', function ($join)

    $join->on('listings_queue.mls_listing_id', '=', 'listings.mls_listing_id')
    ->on('listings_queue.mls_id', '=', 'listings.mls_id')
    ->on('listings_queue.city', '=', 'listings.city');
)
->count();

【讨论】:

以上是关于如何将此 SQL 转换为 Laravel Query Builder 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 sql 查询转换为 laravel 查询生成器

将此 SQL 语句转换为 Laravel ORM

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)

如何将 sql 转换为查询生成器 laravel

如何将此 MySQL 查询转换为 Laravel?

如何将此集合转换为 Laravel 5.2 中的数组