Как передать значения дополнительных столбцов сводной таблицы с помощью метода syn c - PullRequest
0 голосов
/ 06 августа 2020

У меня есть дополнительные столбцы в моей сводной таблице с именами number и weight, как показано ниже

  public function up()
     {
         $schema = static::SCHEMA;
         if (! empty($schema) && (Schema::getConnection()->getDriverName() == 'pgsql')) {
             $schema = $schema.'.';
         } else {
             $schema = '';
        }

    Schema::create($schema.'crime_species', function (Blueprint $table) use ($schema) {
        $table->bigInteger('crime_id')->unsigned();
        $table->bigInteger('species_id')->unsigned();
        $table->integer('number')->nullable();
        $table->integer('weight')->nullable();
        $table->timestamps();

        $table->foreign('crime_id')->references('id')->on($schema.'crimes');
        $table->foreign('species_id')->references('id')->on($schema.'species');
    });
}

У меня также есть следующие методы хранения

   public function store(array $data = []): Crime
     {
         DB::beginTransaction();

         $item = $this->model::create($data);

    if ($item) {
        $item->fishingMethods()->sync($data['fishingMethods'] ?? []);
        $item->species()->sync($data['species'], ['number'=>4, 'weight'=>20]?? []);
        $item->offences()->sync($data['offences'] ?? []);
        $item->confiscatedItems()->sync($data['confiscatedItems'] ?? []);

        DB::commit();

        return $item;
    }

    DB::rollBack();

    throw new GeneralException(__('There was a problem creating this user. Please try again.'));
}

Сложная часть, с которой я столкнулся передает дополнительные значения столбца $ item-> Spec () -> syn c ($ data ['разновидность'], ['number' => 4, 'weight' => 20] ?? []); Дополнительные значения столбца 4 для числа и 20 для веса не были вставлены в сводную таблицу.

не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 06 августа 2020

Метод syn c принимает массив идентификаторов для размещения в промежуточной таблице. Любые идентификаторы, которых нет в данном массиве, будут удалены из промежуточной таблицы. Таким образом, после завершения этой операции в промежуточной таблице будут существовать только идентификаторы из данного массива:

$item->species()->sync([1, 2, 3]);

Вы также можете передать дополнительные значения промежуточной таблицы с идентификаторами:

$item->species()->sync([1 => ['number' => 4, 'weight' => 20]);

Обратите внимание, что вы должны использовать вложенный массив. Где ключ массива - это идентификатор элемента, который нужно связать, а его содержимое - дополнительные столбцы вашей сводной таблицы.

$attach = collect($data['species'])->mapWithKeys(function ($specie) {
    return [$specie => ['number' => 4, 'weight' => 20]];
});

$item->species()->sync($attach);
...