2017-11-13 15 views
1

Eloquent/Laravelを使用してクエリを実行する際に問題が発生しました。Laravelでの関係の不一致

これは私のモデルです: リクエストには0件または複数のオファーがあります。オファーは隠すことができます(オファーに設定された属性です)。

私が行う必要があるのは、オファーを持っているか持っていないすべてのリクエストを取得することです。しかし、オファーが関連付けられている場合、オファーには属性= hideが必要です。

私は以下を試しましたが、うまくいかないようです。

$requests = Request::whereDoesntHave('offers', function ($query) use ($hideStatus) { 
    $query->where('hide', true); 
})->get(); 

私には、オファーが全くないリクエストのみが返ってきていると思います。

FYI、私はLaravel 5.4

てきた任意の助けいただければ幸いです!

ありがとうございました

+0

私はあなたが1が非表示=偽とオファーが –

+0

いや存在しない他のクエリとオファーのデータをフィルタします2つの別々のクエリを記述すべきだと思う....私は思います下の@Sauminiの返答では、私たちはうまくいっていますが、まだ100%はありません。何らかの構文エラーがあるかもしれません。 – lukedj

答えて

0

以下のクエリを確認してください。私は質問をテストしなかった、私が持っている知識でそれを書いた。

$requests = Request::whereHas('offers', function ($query) { 
        $query->where('hide', false); 
       }) 
       ->orDoesntHave('offers') 
       ->get(); 
+0

あなたの返事をありがとう。残念ながら、これは動作しません。定義されていないメソッドを呼び出すエラーが発生します。\ Database \ Query \ Builder :: orDoesntHave()を照会します。 – lukedj

0

ご返信いただきありがとうございます。 "orDoesntHave"は機能しません。次のように動作することを代わりに思える:

$requests = Request::whereHas('offers', function ($query) { 
       $query->where('hide', false); 
      }) 
      ->doesntHave('offers', 'or') 
      ->get(); 
関連する問題