Каждый пользователь в моем приложении может добавить встречу. Назначение должно содержать 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);
}
Задача ещё не решена.
Других решений пока нет …