Mysql Laravel QueryBuilder-对于相同的查询,结果与'where()'和'whereRaw()'不同

Mysql Laravel QueryBuilder-对于相同的查询,结果与'where()'和'whereRaw()'不同,mysql,laravel,laravel-query-builder,Mysql,Laravel,Laravel Query Builder,我正在开发一个laravel应用程序,其中有两个非常相似的QueryBuilder,但在这两种情况下产生的结果不同 问题1: 问题2: 我想知道这两个QueryBuilder之间的关键区别。为什么它会产生不同的结果,尽管看起来是一样的 哪个查询返回正确的结果?如果我想从代理那里找到feed\u状态不等于feed.active的记录。我似乎已经得到了澄清。然而,我想在这里分享我的研发成果。万一其他人也有同样的问题 我已经打印了原始查询,得到了似乎把第三个参数当作字符串比较而不是字段比较的地方。这就

我正在开发一个laravel应用程序,其中有两个非常相似的QueryBuilder,但在这两种情况下产生的结果不同

问题1:

问题2:

我想知道这两个QueryBuilder之间的关键区别。为什么它会产生不同的结果,尽管看起来是一样的


哪个查询返回正确的结果?如果我想从代理那里找到feed\u状态不等于feed.active的记录。

我似乎已经得到了澄清。然而,我想在这里分享我的研发成果。万一其他人也有同样的问题

我已经打印了原始查询,得到了似乎把第三个参数当作字符串比较而不是字段比较的地方。这就是为什么结果似乎不同

但是,当我们使用whereRaw运行查询时,它将其视为表字段比较

拉威尔代码:

MySql查询:

其中feed.activeagents.feed\u状态

拉威尔代码:

MySql查询:


其中feed.active“agents.feed\u status”是,结果是不同的

方法将列与文字值进行比较

->where('table.column', 'cond', 'value')
如果您希望在两列中进行比较,而不使用whereRaw方法;您应该改为使用whereColumn方法


我想可能是底层数据不尽相同,也可能是PHP中用于代理表的模型在每种情况下都不是同一个对象。
$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
            ->where('feed.active', '<>', 'agents.feed_status')
            ->pluck('id');

dd(count($ids)); // print 4259
$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
            ->whereRaw('feed.active <> agents.feed_status')
            ->pluck('id');
"select * from `agents` left join `feed` on `agents`.`identifier` = `feed`.`identifier` where feed.active <> agents.feed_status"
$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
            ->where('feed.active', '<>', 'agents.feed_status')
            ->pluck('id');
"select * from `agents` left join `feed` on `agents`.`identifier` = `feed`.`identifier` where `feed`.`active` <> 'agents.feed_status'"
->where('table.column', 'cond', 'value')
->whereColumn('table1.column1', 'cond', 'table2.column2')