Создание элемента с несколькими отношениями за 1 вызов - PullRequest
0 голосов
/ 02 октября 2018

Итак, у меня есть таблица проекта:

Schema::create('projects', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->string('name');
    $table->string('reference')->nullable();
    $table->date('started')->nullable();
    $table->date('ended')->nullable();
    $table->string('industry')->nullable();
    $table->string('operatives')->nullable();
    $table->timestamps();
    $table->softDeletes();
});

И у меня есть таблица часов:

Schema::create('hours', function (Blueprint $table) {
    $table->increments('id');
    $table->string('hours');
    $table->date('date')->nullable();
    $table->text('notes')->nullable();
    $table->integer('project_id');
    $table->integer('user_id');
    $table->softDeletes();
    $table->timestamps();
});

Теперь, есть ли способ создать ассоциацию как с project_id, так и с user_id?за один звонок?

Я знаю, что могу сделать следующее (добавив user_id к часам):

$hours = [
    'hours'      => $request->hours,
    'date'       => $request->date,
    'operatives' => $request->operatives,
    'notes'      => $request->notes,
    'user_id'    => auth()->user()->id,
];

$create = $project->hours()->save(new $this->hour($hours));

Но я пытаюсь сделать что-то вроде этого:

$hours = [
    'hours'      => $request->hours,
    'date'       => $request->date,
    'operatives' => $request->operatives,
    'notes'      => $request->notes,
];

$create = $project->hours()->save(auth()->user()->save($hours));

И user, и project имеют одинаковое соотношение часов в своих классах:

/**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function hours(): HasMany
{
    return $this->hasMany(Hour::class);
}

Возможно ли это, если да, то как мне поступить?

1 Ответ

0 голосов
/ 02 октября 2018

Я думаю, что лучший способ справиться с этим - отделить сохранение Hours как независимый экземпляр модели, а затем синхронизировать его с обоими, например, так:

$hour = Hour::create($hours);
$project->hours()->syncWithoutDetaching([$hour->id]);
$user->hours()->syncWithoutDetaching([$hour->id]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...