Laravel关系与运行时 - >如何减少数据查询量


Laravel Relationships vs. Runtime -> how to reduce amount of databse queries

我真的很喜欢 laravel handel 如何用几行代码来建立关系。但是,当有大量数据时,它会通过向数据库发出许多请求而减慢速度。

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 生成。

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

在这种情况下,

您正在引发新查询,因为您正在调用未在 User 上加载的关系。您可以渴望加载更多:

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

但你也可以无限地沿着这条线走下去,因为它们相互参照的方式。

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