Laravel Eloquent 版本的“NOT IN”SQL

Posted

技术标签:

【中文标题】Laravel Eloquent 版本的“NOT IN”SQL【英文标题】:Laravel Eloquent version of "NOT IN" SQL 【发布时间】:2019-04-24 09:14:13 【问题描述】:

只需要这个查询的 Eloquent ORM 格式。。头疼一阵子。

SELECT * FROM players WHERE user_id NOT IN (SELECT player_id FROM team_requests) 

【问题讨论】:

【参考方案1】:

我肯定会把它分成两部分开始:

$player_ids = TeamRequest::all()->pluck('player_id')->toArray();

然后

Player::whereNotIn('user_id', $player_ids)->get();

应该给你你的分析器。然后,如果您想在一个表达式中使用它,也许可以尝试

Player::whereNotIn('user_id',
  TeamRequest::all()->pluck('player_id')->toArray()
)->get();

【讨论】:

两个版本都会创建不必要的 SQL 查询。【参考方案2】:

假设Player模型有一对多关系teamRequests,那么:

Player::doesntHave('teamRequests')->get();

关系方法可能如下所示:

public function teamRequest() 
    return $this->hasMany(TeamRequest::class, 'player_id', 'user_id');

【讨论】:

【参考方案3】:

你可以试试这个。 首先,您可以选择所有玩家 ID。

$player_ids = TeamRequest::select('player_id')->get();

然后你就可以找到玩家了

Player::whereNotIn('user_id', $player_ids)->get();

【讨论】:

以上是关于Laravel Eloquent 版本的“NOT IN”SQL的主要内容,如果未能解决你的问题,请参考以下文章

laravel eloquent: whereDate not found 记录包含在期间

Laravel Eloquent OR WHERE IS NOT NULL

Laravel Eloquent 在子查询中有两个“WHERE NOT IN”

MYSQL 与 Laravel 的 Eloquent

如何使用 Laravel Eloquent 创建子查询?

Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了啥?