как поменять данные в связанной таблице?Laravel
Нужно изменить поля в связанной модели(таблице)
в данном случае sale_price, regular_price
есть модель:
class Product{
public function sku()
{
return $this->hasMany(SKU::class);
}
}
таблица от модели sku
sku
имеет:
id int(10) unsigned
regular_price decimal(8,2)
sale_price
product_id
//Вот я получаю все товары
$products = Product::all();
foreach ($products as $product){
$product->sku->regular_price = 1;
$product->sku()->save(); //так что-то не работает ошибка
$product->update(); //так тоже не меняет regular_price но все работает т.е обновляет просто наверно модель $product
}
Ответы (2 шт):
Автор решения: Junior
→ Ссылка
нужно так:
foreach ($products as $product){
$sale_price = 40;
$product->sku()->update(['sale_price' => $sale_price]);
}
Автор решения: Yauhen Kib
→ Ссылка
При вызове
$product->sku();
вы получаете не коллекцию, а объект QueryBuilder
А при вызове
$product->sku;
Назад вернется уже отработанный запрос, запись выше эквивалентна
$product->sku()->all();
Ошибка уже должна быть на этапе
$product->sku->regular_price = 1;
Где вы пытаетесь для коллекции определить свойство regular_price
Так как Product может иметь множество SKU о чем говорит HasMany, нужно явно указывать какую запись SKU нужно изменять. Все или какую-то конкретную.
Если нужно изменить все записи, правильно будет написать например
$products = Product::all();
$newPrice = 10;
foreach ($products as $product)
{
$product->sku->each(function($sku) use ($newPrice) {
$sku->regular_price = $newPrice;
$sku->update();
});
}
вы видите пример перечисления через foreach, так и с использованием анонимной функции