使用Eloquent ORM基于where
子句查找相关对象的正确方法是什么?
例如,我想找到一个与Store对象相关的特定Product对象。我以为我可以这样做:
$store = Store::where('hash', Input::get('s'))->first();
$product = $store->products->where('ext_id', 2)->get();
但是,我收到where
是一种未知方法的错误。如果不是我使用find
的地方,那么它可以正常工作:
$product = $store->products->find(1);
为什么我不能这样使用where
?
答案 0 :(得分:1)
$product = $store
->products()
->where('ext_id', 2)->get();
这将不运行2次查询。
区别在于:
$store->products() // relation object you can query
$store->products // already fetched related collection / model (depending on relation type)
您也可以使用预先加载:
$store = Store::where('hash', Input::get('s'))
->with(['products' => function ($q) {
$q->where('ext_id', 2);
}])->first();
这将仅在商店中加载ext_id = 2
个商品,可通过$store->products
现在,涉及的方法find
不同:
$store->products()->find(1); // runs select ... where id=1
$store->products->find(1); // gets model with id 1 from the collection