Laravel Eloquent 模型 __construct 调用关系的方法
Laravel Eloquent Models __construct method to call relations
我想让我的模型在实例化时自动调用它的关系。截至目前,我的模型如下所示:
class AdminLog extends Model{
public function __construct(){
$this->belongsTo('App\User', 'admin_id');
}
}
但是当我尝试做 dd(AdminLog::get()->first());
时,它没有显示任何关系。
编辑 #1:尝试在模型的 __construct
方法中添加 parent::__construct();
,但没有成功。
belongsTo()
定义关系,它不会加载它。
首先你需要定义关系,然后你可以使用load
方法随时加载它。
class AdminLog extends Model {
public function user() {
return $this->belongsTo(\App\User::class, 'admin_id');
}
}
$log = AdminLog::first();
$log->load('user');
可以在构造函数中加载,但我强烈建议不要这样做。如果您有 20 个 AdminLog
个对象,那么它将查询数据库 20 次,每个对象一次。那是低效的。
您应该改为使用 eager loading。这将查询用户 table 仅 一次 以获取所有 20 个管理日志。有很多方法可以做到这一点,这里是一个例子:
$logs = AdminLog::take(20)
->with('user')
->get();
dd($logs->toArray());
我想让我的模型在实例化时自动调用它的关系。截至目前,我的模型如下所示:
class AdminLog extends Model{
public function __construct(){
$this->belongsTo('App\User', 'admin_id');
}
}
但是当我尝试做 dd(AdminLog::get()->first());
时,它没有显示任何关系。
编辑 #1:尝试在模型的 __construct
方法中添加 parent::__construct();
,但没有成功。
belongsTo()
定义关系,它不会加载它。
首先你需要定义关系,然后你可以使用load
方法随时加载它。
class AdminLog extends Model {
public function user() {
return $this->belongsTo(\App\User::class, 'admin_id');
}
}
$log = AdminLog::first();
$log->load('user');
可以在构造函数中加载,但我强烈建议不要这样做。如果您有 20 个 AdminLog
个对象,那么它将查询数据库 20 次,每个对象一次。那是低效的。
您应该改为使用 eager loading。这将查询用户 table 仅 一次 以获取所有 20 个管理日志。有很多方法可以做到这一点,这里是一个例子:
$logs = AdminLog::take(20)
->with('user')
->get();
dd($logs->toArray());