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);
}

0 ответов

Другие вопросы по тегам