Как изменить значение дополнительных полей в сводной таблице?

Добрый день.
Существует 2 модели:
1) Products
<?php

class Product extends Model
{
    public function options()
    {
        return $this->belongsToMany(Option::class)
            ->withPivot('status')
            ;
    }
}

2) Options
<?php

class Option extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class)
            ->withPivot('status')
        ;
    }
}


Между ними установлена связь много ко многим через сводную таблицу. В сводной таблице имеется дополнительное поле - status.

Также имеется массив id таблицы options. Как всем связанным записям (указанных в массиве) из сводной таблицы изменить status (одинаковый)?

Использование метода syncWithoutDetaching статус не устанавливает.
Метод attach добавляет новые записи, sync - удаляет не переданные в массиве, save и update - работает для каждой отдельной записи через...
<?php
$product->options()->syncWithoutDetaching($ids, ['status' => 0]);
$product->options()->whereIn(
            'options.id',
            $product->options->pluck('id')->diff($ids)
        )->get();


Есть ли какой-нибудь способ?
  • Вопрос задан
  • 361 просмотр
Решения вопроса 1
chupacabramiamor
@chupacabramiamor
Инженегр-программист
Пишу по-памяти потому что нет под рукой связующих таблиц, попробуйте. Если что подкорректируем:
$product
    ->options()
    ->whereIn('options.id', $product->options->pluck('id')->diff($ids))
    ->get()
    ->each(function($option) {
        $option->pivot->status = 0;
        $option->pivot->save();
    });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы