首頁  >  問答  >  主體

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 天前542

全部回覆(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
  • 取消回覆