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