为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 模型创建覆盖

Laravel 模型创建覆盖

PHP
动漫人物 2022-12-11 16:36:27
在我的 Laravel 项目中,我有不同的用户类型,它们都有一个基本的用户模型。以下是数据库拓扑的简要概念:users: - id - name - emailstudents: - age - user_idteachers: - budget - user_idemployee: - is_admin - user_id就我而言,每个Student, Teacher,Employee都有自己的User. 但是如果我想制作一个新的,Student例如,我必须同时制作一个Student和User模型。我知道 Laravel 中的观察者模式可以使这项工作更容易,但我希望能够以编程方式制作Student如下模型:$student = App\Student::create(['name' => 'Joe', 'email' => 'joe@example.net', 'age' => '20']);问题从那里变得更加复杂,因为Teacher模型也需要同时具有Employee模型和User模型。有没有办法覆盖create我的模型上的方法,以便我可以传递User创建参数和Student参数?
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

您可以覆盖该create方法并自己执行此操作。在您的Student模型类中添加:


public static function create($arr) {

    $user = User::create([

        'name' => $arr['name'],

        'email' => $arr['email']

    ]);


    $student = parent::create([

        'age' => $arr['age']

        'user_id' => $user->id

    ]);


    return $student;

}

您可以以类似的方式执行其他方法。


如果您的 Laravel 版本高于 5.4.*,请执行以下操作:


public static function create($arr) {

    $user = User::create([

        'name' => $arr['name'],

        'email' => $arr['email']

    ]);


    $student = static::query()->create([

         'age' => $arr['age']

         'user_id' => $user->id

    ]);


    return $student;

}


查看完整回答
反对 回复 2022-12-11
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信