2017-07-27 49 views
1

私は多くのモデルを持っている多くのモデルベータを持つアルファモデルを持っていますチャーリー 少なくとも1つのチャーリーを持っている1つのアルファからすべてのベータ版を持っていません。Laravel Eloquent - 関係のある関係はありますか?

だから私の推測では:

$alpha = Alpha::first(); 
$betasWithACharlie = $alpha->betas()->has('charlies')->get(); 

しかし、これは動作しません。 私はまた、 "whereHas"をうまく試してみました。

+0

ちょうどヒント:dbeaverやheidiSQLのようないくつかのSQLクライアントで最初に通常のクエリを書いてください。次に、その質問をEloquentに翻訳しようとします。 –

+0

モデルを正しく設定しましたか?これが機能するには、FKが必要です。がんばろう! – bwaaaaaa

答えて

2

単に:

$betasWithACharlie = $alpha->betas()->has('charlies', '>', 1)->get(); 

それとも、彼らはより高度なクエリ

$betasWithACharlie = $alpha->betas()->whereHas('charlies', function($query){ 
$query->where('condition'); 
})->get(); 
+0

それはあなたのためにうまくいったのですか? – Sletheren

+0

それはうまくいきますが、1つの特殊なケースでは奇妙なことに、すべてのベータ版を提供しますが、アルファ版には関係しません。 (より多くの結果を与えます) – Pixeuh

+0

外部キーをチェックするには、DBに値を設定している間に何かがなければなりません。 – Sletheren

0

私は前にテストしていないという考えを持っているため、特定の条件を満たした場合にのみ「チャーリーズ」を取得することができます。

$betasWithACharlie = $alpha->betas()->whereHas('charlies', function ($query) { 
    $query->where('beta_id', '!=', 0); 
})->get(); 

そして、別のものを試してみてください。

$betasWithACharlie = Alpha::whereHas('betas', function ($query) { 
    $query->has('charlies'); 
}); 
関連する問題