如何将此SQL转换为Laravel查询生成器查询?

时间:2014-03-07 17:19:16

标签: mysql sql laravel laravel-4 query-builder

我在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 Query Builder并使用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输出看起来除了?绑定。 Coudl那是问题吗?我不明白为什么我的查询构建器查询在与顶部的原始SQL相同的数据库上运行会产生不同的结果。

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

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

2 个答案:

答案 0 :(得分:0)

删除Closure,如:

$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();

答案 1 :(得分:0)

试试这个多重连接条件

$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();