Laravel Eager加载约束时出现意外结果

时间:2014-10-13 03:29:17

标签: laravel-4 eloquent eager-loading

我有两个表:assetsasset_classifications。这些表具有一对多关系,asset有一个资产分类,而asset_classifications有很多资产。

我尝试运行查询以获取所有资产,其中asset_classification名称为"笔记本电脑",例如。我试图通过使用约束来运行这个急切的负载来实现这一点:

$laptops = Asset::with(array('classification'=>function($query){
    $query->where("name","=","laptops");
}))->get();

foreach($laptops as $laptop){
    echo $laptop->serial_number."<br/>";
}

nameasset_classifications表中的一列。通过为AssetAssetClassification模型设置所需的方法,我已经形成了一对多的关系。

我渴望加载的问题在于它获得了所有资产,似乎忽略了我的急切加载约束,该约束试图只获得&#34;笔记本电脑&#34;。我认为问题在于我的代码或我对急切加载的理解,但我不知道哪个。我还是新手,我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

with用于过滤相关模型,而您需要whereHas来按相关表约束过滤主查询模型:

$laptops = Asset::whereHas('classification', function ($query) {
    $query->where("name","=","laptops");
})->get();
相关问题