我真的很喜欢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。
那么是否有一种简洁的方法来减少查询量,以便我可以加快应用程序的速度?
答案 0 :(得分:0)
在这种情况下,您将导致新查询,因为您正在调用未在User上加载的关系。你可以急切加载更多:
Object::with('users.object')....
但是你也可以无限地继续沿着这条线走下去,因为它们相互引用的方式。
如果您打算以这种方式使用它,那么该方法可能不属于User模型。