我有两个表:assets
和asset_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/>";
}
name
是asset_classifications
表中的一列。通过为Asset
和AssetClassification
模型设置所需的方法,我已经形成了一对多的关系。
我渴望加载的问题在于它获得了所有资产,似乎忽略了我的急切加载约束,该约束试图只获得&#34;笔记本电脑&#34;。我认为问题在于我的代码或我对急切加载的理解,但我不知道哪个。我还是新手,我希望有人可以帮助我。
答案 0 :(得分:2)
with
用于过滤相关模型,而您需要whereHas
来按相关表约束过滤主查询模型:
$laptops = Asset::whereHas('classification', function ($query) {
$query->where("name","=","laptops");
})->get();