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

标签 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 查询生成器并使用 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 输出看起来是一样的。绑定(bind)。这会是问题所在吗?我不明白为什么我的查询生成器查询与顶部的原始 SQL 在同一数据库上运行会产生不同的结果。

另一个线索是,如果我删除 Laravel 查询生成器查询中的 where 子句,我会得到结果。

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

最佳答案

像这样删除关闭:

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

关于mysql - 如何将此 SQL 转换为 Laravel 查询生成器查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256560/

相关文章:

php - Laravel 迁移,hasColumn 方法失败

php - 我得到未定义的属性 : stdClass

php - MySQL 更新不起作用

mysql - 如何为 "Check In"社会服务设计数据库

php - 使用 AWS 弹性 Beanstalk 的 FTP

sql - 最简单的标准 C 语言 SQL 实现,可用于基于 Linux 的 ARM 终端

mysql - SQL - 在 UPDATE QUERY 上 REPLACE(UUID) 时重复

javascript - Vue JS,如何使 axios 请求 API 在加载 HTML DOM 组件之前首先运行?

mysql - 创建 MySQL 触发器时出现语法错误

jquery - 以模式形式Jquery显示来自MYSQL的特殊字符?