Laravel Eloquent ORM找到相关对象

时间:2014-08-27 15:09:21

标签: php laravel eloquent

使用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

1 个答案:

答案 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