从父关系派生的键值对对象访问项目

Accessing an item from a key value pair object derived from a parent relationship

我正在尝试在我的用户 table 中实现一个 created_by 列。

我创建了一个迁移文件以将新列添加到用户的 table:

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->unsignedInteger('created_by')->default(0);
        });
    }

我有一个具有以下关系的用户模型:

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }

    public function createdBy()
    {
        return $this->belongsTo(self::class, 'created_by');
    }

在 UsersController 中,我有这个方法:

    public function view($id)
    {
        $user = User::with(['roles', 'createdBy'])->where('created_by', Auth::id())->find($id);
        return $user;
    }

当我 return 用户变量时,我得到这个结果:

现在,我想访问“created_by”中“email”的值。我尝试这样做:

return $user->created_by

我得到的是 2,但我想要得到的是“biodunna@mailnator.com”。

我也试过 return $user->created_by->email 但它 return 出错了,因为我从 return $user->created_by 得到的结果只是一个数字。

我想获取电子邮件值“biodunna@mailnator.com”。

根据您的 JSON 回复,这应该有效:

$user[0]->created_by->email

请将 createdBy 关系函数更改为 createdByUser

这里我们只是更改了函数名,以避免列名和关系名冲突。

public function createdByUser()
{
    return $this->belongsTo(self::class, 'created_by');
}

所以现在,您可以访问

$user->createdByUser->email