【问题标题】:Grab relation of saved Eloquent model保存的 Eloquent 模型的抓取关系
【发布时间】:2015-04-02 02:06:29
【问题描述】:

保存 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);

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

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    只需像这样访问一次:

    $model->baz
    

    并且关系会被加载。

    或者你可以延迟加载关系:

    $model->load('baz'); 
    

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

    【讨论】:

      【解决方案2】:

      您应该使用 load() 预先加载现有模型。

      试试

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

      【讨论】:

        【解决方案3】:

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

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

        那你可以试试这个:

        $results = $model->bazes;
        

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

        $results 是与 foo->id = x 直接相关的 baze 的可迭代集合

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

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

        我希望这对你有用。

        【讨论】:

        • 我知道我可以这样做,但是这个动作会发生很多,我不想仅仅通过获取关系来执行额外的查询。
        猜你喜欢
        • 1970-01-01
        • 2019-09-20
        • 2017-02-22
        • 2017-01-12
        • 2018-05-11
        • 2014-03-04
        • 2014-11-22
        • 2015-10-29
        • 2016-02-26
        相关资源
        最近更新 更多