2017-07-27 177 views
1

我有一個模型阿爾法,其中有很多模型測試其中有許多模型查理 我不想從一個阿爾法至少有一個查理所有的測試版。Laravel雄辯 - 關係是否有關係?

所以我的猜測是:

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

但是,這是行不通的。 我也試過用「whereHas」失敗。

+0

只是一個提示:先在一些sql客戶端(如dbeaver或heidiSQL)中先寫正常查詢。接下來嘗試將所述查詢翻譯成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

多數民衆贊成在工作,但奇怪的一個特殊情況下它給所有的貝塔,但不相對於阿爾法一。 (其給出更多的結果,其中where條件比沒有) – Pixeuh

+0

檢查外鍵,在填充數據庫時必須有一些東西。 – Sletheren

0

我有一個思想,我不前測試:

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

並嘗試另一個問題:

$betasWithACharlie = Alpha::whereHas('betas', function ($query) { 
    $query->has('charlies'); 
});