首页  >  问答  >  正文

Laravel 8 Eloquent中无法正确使用whereNotExists子句的问题仍未解决

<p>我有两个表,一个是包含不同用户的表,另一个是名为“factures”的发票表,它有一个外键userid,我称之为client_id。我想要得到的是由某个管理员创建并且还没有发票的客户数量。这是我尝试的代码:</p> <pre class="brush:php;toolbar:false;">$clients = User::select('id') ->where([['created_by',$membre_id],['role','Client']]) ->orWhere([['updated_by',$membre_id],['role','Client']]) ->whereNotExists(function($query) { $query->select(DB::raw('client_id')) ->from('factures') ->where('created_by',$member_id); })->get();</pre> <p>但是这个查询给我返回了所有由$member_id创建的客户,没有例外。 我的查询有什么问题吗?</p>
P粉287726308P粉287726308389 天前540

全部回复(1)我来回复

  • P粉670838735

    P粉6708387352023-09-06 11:10:07

    你尝试了以下内容吗:

    $clients = User::select('id')
        ->where(function($query) use($member_id){
            $query->where([['created_by',$membre_id],['role','Client']])
                ->orWhere([['updated_by',$membre_id],['role','Client']])
        })
        ->whereNotExists(function($query) use($member_id){
            $query->select(DB::raw('client_id'))
                ->from('factures')
                ->where('created_by',$member_id);
        })
        ->get();
    }

    此答案仅在第一和第二个条件(created_by和updated_by)之间应用了OR条件,并且其结果与第三个条件的AND相结合。

    回复
    0
  • 取消回复