【问题标题】:How to obtain the user model's attributes in Laravel via class accessor如何通过类访问器在 Laravel 中获取用户模型的属性
【发布时间】:2021-04-28 04:59:45
【问题描述】:

如果用户注册为客户,我正在尝试在 RegisterController(Laravel Auth 包的一部分)中创建用户的同时创建客户。但是,我尝试通过将以下代码添加到我的 User 模型来向 User 类添加一个“访问器”,以访问 user_id 属性,但访问器似乎没有按预期工作。 (见:https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor

public function getUserIdAttribute($user_id)
{
    return $user_id;
}

然后我尝试使用这个函数直接从RegisterController中的模型访问它:

protected function create(array $data)
{

    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'username' => $data['username'],
        'password' => Hash::make($data['password']),
        'utype' => $data['utype'],
    ]);

    if ($data['utype'] == "customer") {
        Customer::create([
            'user_id' => $user->user_id,
        ]);
    }

    return $user;
}

由于某种原因,$user->user_id 虽然返回 NULL。问题是什么?为什么访问器没有正确应用?

【问题讨论】:

  • 是 'users' 表 'user_id' 的主键吗?
  • @lagbox 谢谢!那是我的问题,主键实际上只是 'id' 。

标签: php laravel authentication eloquent accessor


【解决方案1】:

在@lagbox 的帮助下,我找出了问题所在。原来,列名只是“id”。

【讨论】:

  • 更重要的是,如果您在UserCustomer 模型之间有关系(您应该这样做),那么注册$customer 实体的良好做法将像$user->customer()->create(); 一样简单。另外,请检查observers,因为这些是放置我提议的线路的好地方。
  • @Tpojka 感谢您的建议!我一定会在我们的模型中实现它!
猜你喜欢
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 2023-03-03
  • 2023-03-18
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多