已保存 Eloquent 模型的抓取关系

Grab relation of saved Eloquent model

保存 Eloquent 模型后,如何检索与它的关系?

例如:

$model = new Foo;
$model->save();
dd($model); //return an object of Foo

假设我已经设置了与 Baz 的关系,我应该像普通的 Eloquent 对象一样获取关系。

dd($model->with('baz')->get());

但是这将返回数据库中具有关系的每条 Foo 记录。

我只想获取与保存的 Foo 模型相关的当前 Baz 模型。

我能做到:

$result = Foo::with('baz')->find($model->id);
dd($result);

但这会导致另一个查询,我想阻止它。

取决于您如何在模型上声明关系。假设您的关系声明为一对多,如下所示:

class Foo extends Eloquent {
    public function bazes()
    {
        return $this->hasMany('Baz');
    }
}

那你可以试试这个:

$results = $model->bazes;

$results = Foo::find($id)->bazes

$results 是与 foo->id = x

直接相关的 bazes 的可迭代集合

但是如果你想预加载过滤器,那么你可以这样尝试:

$result = Foo::with(array('bazes' => function($query)
{
    $query->where('id', $id);

}))->get();

希望这对你有用。

您应该使用 load().

预先加载现有模型

尝试

$model = new Foo;
$model->save();
$model->load('baz');

只需像这样访问一次即可:

$model->baz

关系将被加载。

或者你可以lazy eager load 关系:

$model->load('baz'); 

效果是一样的,尽管第一种方法允许您实际直接使用关系的结果。如果你只想在数组 / JSON 输出中建立关系,我建议你使用第二种方法,因为它更清楚你在做什么。