gpt4 book ai didi

mysql - Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 的不同结果

转载 作者:可可西里 更新时间:2023-11-01 06:32:49 26 4
gpt4 key购买 nike

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

查询 1:

$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
->whereRaw('feed.active <> agents.feed_status')
->pluck('id');

dd(count($ids)); // print 485236

查询 2:

$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
->where('feed.active', '<>', 'agents.feed_status')
->pluck('id');

dd(count($ids)); // print 4259

我想知道这两个 QueryBuilder 之间的主要区别。为什么它产生不同的结果,尽管它看起来相同?

哪个查询返回正确的结果?如果我想从 feed_status 不等于 feed.active 的代理中找到记录。

最佳答案

看来我已经得到澄清了。然而,我想在这里分享我的研发。以防其他人遇到同样的问题。

我已经打印了原始查询并获取where() 似乎将第三个参数视为string 比较而不是field比较。这就是为什么结果似乎不同的原因。

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

Laravel 代码:

$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
->whereRaw('feed.active <> agents.feed_status')
->pluck('id');

MySql 查询:

"select * from `agents` left join `feed` on `agents`.`identifier` = `feed`.`identifier` where feed.active <> agents.feed_status"

# feed.active <> agents.feed_status

Laravel 代码:

$ids = $this->model->leftJoin('feed', 'agents.identifier', '=', 'feed.identifier')
->where('feed.active', '<>', 'agents.feed_status')
->pluck('id');

MySql 查询:

"select * from `agents` left join `feed` on `agents`.`identifier` = `feed`.`identifier` where `feed`.`active` <> 'agents.feed_status'"

# where feed.active <> 'agents.feed_status'

关于mysql - Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com