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());