@truevolkolak

Почему не работает массовое изменение атрибута в Laravel?

Доброго дня!
В таблице товаров 'products' есть поле 'autoscu' (имеет вид "xxx-xxx", где "х" - цифра 0-9). Мне нужно для всех товаров (до 1000 штук) поменять его, убрав символ дефиса.
В контроллере у меня так:
public function modifyAutoScu(Request $request) {
        $products = Product::all();
        foreach ($products as $product) {
              $product->update(['autoscu' => preg_replace("/[^0-9]/", "", $product->autoscu )]);
        }
        return redirect()->route('admin.products.index');
    }

Изменения не сохраняются. Более того, при такой проверке:
$products = Product::all();
foreach ($products as $product) {
   $product->autoscu = '123456';
   dd($product->autoscu);
}

Выводит старое неизмененное значение.

Поле 'autoscu' присутствует в модели Product в массиве $fillable.
Если менять по одному продукту, всё получается:
$product = Product::first();
$product->update(['autoscu' => preg_replace("/[^0-9]/", "", $product->autoscu )]); //это работает


Вариант через save(), соответственно, тоже не работает:
$products = Product::all();
foreach ($products as $product) {
   $product->autoscu = preg_replace("/[^0-9]/", "", $product->autoscu );
   $product->save();
}


Как решить эту простую проблему?
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
А можно не разбираться чо там и как

Product::update(['autoscu' => DB::raw('replace(autoscu, "-", "")')]);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы