2017-07-27 178 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'); 
});