Laravel Relationships vs. Runtime - >如何减少数据库查询的数量

时间:2016-01-16 23:35:13

标签: php laravel eloquent relationship laravel-5.2

我真的很喜欢laravel handels与几行代码的关系。但是当存在大量数据时,它会通过向数据库发出许多请求来减慢速度。

class Object extends Model {
    public function users() {
        return $this->hasMany(User::class);
    }
}

class User extends Model {
   proteced $appends = [
       'url'
   ];

   public function object() {
       return $this->belongsTo(Object::class);
   }

   public function getUrlAttribute() {
       return 'exmaple.com/object/' . $this->object->value . '/user/' . $this->id;
   }
}

当我打电话

return Object::with('users')->find(2);

它将始终对数据库进行新的查询以生成URL。

那么是否有一种简洁的方法来减少查询量,以便我可以加快应用程序的速度?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您将导致新查询,因为您正在调用未在User上加载的关系。你可以急切加载更多:

Object::with('users.object')....

但是你也可以无限地继续沿着这条线走下去,因为它们相互引用的方式。

如果您打算以这种方式使用它,那么该方法可能不属于User模型。