【问题标题】:Laravel Eloquent version of "NOT IN" SQLLaravel Eloquent 版本的“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) 

【问题讨论】:

    标签: php sql laravel orm eloquent


    【解决方案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();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 2017-08-30
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        相关资源
        最近更新 更多