Laravel Переопределение создания модели - PullRequest
0 голосов
/ 07 апреля 2020

В моем проекте Laravel у меня есть разные типы пользователей, у всех из которых есть базовая модель User. Вот краткое представление о топологии базы данных:

users:
 - id
 - name
 - email

students:
 - age
 - user_id

teachers:
 - budget
 - user_id

employee:
 - is_admin
 - user_id

В моем случае каждый из Student, Teacher, Employee имеет свой собственный User. Но если я хочу сделать новую Student, например, я должен сделать модель Student и User. Мне известен шаблон Observers в Laravel, который может упростить эту работу, но я хотел бы иметь возможность программно создавать Student модели, подобные следующим:

$student = App\Student::create(['name' => 'Joe', 'email' => 'joe@example.net', 'age' => '20']);

Проблема становится оттуда еще сложнее, потому что модели Teacher также должны иметь модель Employee и модель User. Есть ли способ переопределить метод create в моей модели, чтобы я мог передать User параметры создания, а также Student параметры?

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете переопределить метод 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...