在我的 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;
}
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消