Laravel 模型创建覆盖

在我的 Laravel 项目中,我有不同的用户类型,它们都有一个基本的用户模型。以下是数据库拓扑的简要概念:


users:

 - id

 - name

 - email


students:

 - age

 - user_id


teachers:

 - budget

 - user_id


employee:

 - 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参数?


动漫人物
浏览 78回答 1
1回答

互换的青春

您可以覆盖该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;}
打开App,查看更多内容
随时随地看视频慕课网APP