У меня есть продукт, который имеет много штрих-кодов, когда я нахожусь на странице редактирования продукта и добавляю / удаляю / редактирую штрих-коды продукта, он снова сохраняет штрих-коды (PS: я знаю, откуда возникла проблема, но не уверен о решении для этого)
Logi c
Итак, вот что я ожидаю, когда я нахожусь на странице редактирования продукта:
- Если текущий штрих-коды изменились, просто обновите их
- если какой-либо из текущих штрих-кодов удален, удалите их из базы данных
- если какой-либо новый штрих-код добавлен в список, добавьте его в базу данных
В основном это sync()
функциональность, которую я ищу, но, основываясь на моих модельных отношениях, я думаю, что использование sync()
не является вариантом.
Код
Product model
public function barcodes()
{
return $this->hasMany(Barcode::class, 'product_id', 'id');
}
barcode model
protected $fillable = [
'product_id', 'serial_number',
];
public function product()
{
return $this->belongsTo(Product::class);
}
Controller (update function)
public function update(Request $request, $id)
{
$product = Product::find($id);
$product->name = $request->input('name');
if($product->save())
{
if(!empty($request->input('barcodes')))
{
foreach($request->input('barcodes') as $bb)
{
if(!empty($bb['serial_number'])){ // make sure no empty value saves
$barcode = new Barcode;
$barcode->product_id = $product->id;
$barcode->serial_number = $bb['serial_number'];
$barcode->save();
}
}
}
}
}
Как я уже упоминал выше I am aware where the issue comes from, but not sure about the solution for it
и проблема повторяющиеся данные сохранения - это то, что я использую $barcode = new Barcode;
.
Extra
Для ясности, это то, что мои данные lo хорошо, когда я отправляю запрос на обновление в серверную часть
Вопрос
Что мне следует изменить в моем коде, чтобы достичь мое желание logi c?