2017-08-26 7 views
1

で複数のhas()/ orHas()を実行するにはまず最初に、laravel ORMを使用して、Raw SQLメソッドではなくクエリビルダを使用するといいでしょう。だから私の質問です。laravel 5.4 orm

私はbelongTo(User::class)リレーションと6 hasMany(TextPost::class) - というようなボットと呼ばれるモデルを持っています。 hasMany(...)リレーションシップの少なくとも1つのレコードを持つボットを取得したい。したがって、ボットにTextPostのレコードがある場合、返される必要があります。ボットにhasMany(...)リレーションのいずれもない投稿がない場合、返されません。

これまでのところ、私は私のUserモデル

public function broadCasters() 
    { 
     return $this->bots->has('text_post')->orHas('photo_post')->orHas('media_post')->orHas('video_post')->orHas('audio_post')->orHas('document_post'); 
    } 

が、そのは仕事に行かないでこのような何かを持っているとCall to a member function orHas() on boolean

ので、私はこのような何かにそれを変更したいと言う:

public function broadCasters(){ 
    return $this->bots->where(function($query){ 
    return $query->has('TextPost')->orHas('PhotoPost') ...; 
    }); 
} 

でもこれはうまくいかず、Missing argument 2 for Illuminate\Support\Collection::where()と表示されます。私は何をすべきか?

私はlaravel 5.4を使用しています。私はこの質問whereHas on multiple relationships - laravel 5.4を見て、それは私が欲しいものに近いが、まだ答えはありません!

もこの質問は、あまりにもCombining AND/OR eloquent query in Laravel

私の質問の別のですが、そのどちらか動作していません。

、今これは私が欲しいものEXACTLYされますが、そのFOR LARAVEL 4と私が使用しているため、動作していないが、私が思うにLARAVEL 5.4

Laravel eloquent multiple has and where clause

+0

$ reqObj->(関数($ qは){$ q-で>( 'グループ')は、$ q-で> orHas( 'GROUP_MEMBER');})ここで、 ;私のためにうまくいっているようだ。 – tromtv

答えて

0

は、ユーザー$this->bots、結果はlaravelコレクションになりますhereIfコードを入力してくださいアレイ。あなたは、このような$this->bots()を使用する必要があります。

public function broadCasters(){ 
    return $this->bots()->where(function($query){ 
    return $query->has('TextPost')->orHas('PhotoPost') ...; 
    })->get(); 
}