Laravel — Вставка в базу данных, опциональная цепочка полей

Каждый пользователь в моем приложении может добавить встречу. Назначение должно содержать label и status, Есть несколько отношений, установленных между ними, как показано ниже. Каждый пользователь может добавить свой собственный labels а также statuses, так же как appointments,

В моей форме создания встречи я покажу выпадающий список ярлыков и статусов пользователей. Но также есть пустое поле под этими выпадающими списками, так что пользователь может решить создать новую метку или статус на лету.

У меня вопрос: возможно ли сохранить встречу в базе данных за один раз (цепочка), чтобы новый ярлык и / или статус были сохранены (если один из них представлен)? Мой текущий метод сохранения выглядит так:

Auth::user()->appointments()->create($request->all());

Но это без учета каких-либо новых меток или статусов, которые отправляет пользователь. Возможно ли то, что я хочу, или я должен вместо этого делать это?

    if($request->label_name)
{
Auth::user()->labels()->create($request->label_name);
}

Сначала создайте новый ярлык, если он представлен. А потом что-то вроде:

    Auth::user()->appointments()->create([
$request->appointment->name,
$request->label_id // Figure out a way to get the last inserted label_id
]);

Причина, по которой я спрашиваю об этом, заключается в том, что я хочу, чтобы все было просто, и если есть простой способ сделать это, это было бы здорово. Это все для целей обучения, поэтому любой ответ является хорошим ответом.

Модель назначения:

public function user()
{
return $this->belongsTo(User::class);
}

public function label()
{
return $this->hasOne(Label::class);
}

public function status()
{
return $this->hasOne(Status::class);
}

Модель пользователя:

public function appointments()
{
return $this->hasMany(Appointment::class);
}

public function labels()
{
return $this->hasMany(Label::class);
}

public function statuses()
{
return $this->hasMany(Status::class);
}

этикетка & Модель состояния:

public function user()
{
return $this->belongsTo(User::class);
}

public function appointments()
{
return $this->belongsTo(Appointment::class);
}

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …