抓取已保存的Eloquent模型的关系

时间:2015-02-03 00:35:02

标签: laravel laravel-4 eloquent

保存一个Eloquent模型后,我怎样才能找回它的关系?

例如:

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

假设我已经设置了与Baz的关系,我应该像普通的Eloquent Object一样抓住这种关系。

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

但这会返回de数据库中每个Foo记录的关系。

我只是希望能够获得与保存的Foo模型相关的当前Baz模型。

我能做到:

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

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

3 个答案:

答案 0 :(得分:1)

只需像这样访问一次:

$model->baz

将加载关系。

或者你可以 lazy eager load 关系:

$model->load('baz'); 

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

答案 1 :(得分:0)

取决于您如何在模型上声明您的关系。假设您的关系被声明为One to Many,就像这样:

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

然后你可以试试这个:

$results = $model->bazes;

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

$ results是一个可迭代的bazes集合,直接与foo-> id = x

相关

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

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

}))->get();

我希望这适合你。

答案 2 :(得分:0)

您应该使用load()急切加载现有模型。

尝试

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