product
模型建立了一对多的关联关系
//商品拥有多张缩略图
public function images()
{
return $this->hasMany(ProductImage::class);
}
新建商品一对多关联插入
public function store(ProductPost $request)
{
try {
DB::transaction(function () use ($request) {
//插入数据到商品表
$product = Product::create($request->all());
//插入数据到商品描述表
$product->description()->create([
'description' => $request->input('description'),
'editor-html-code' => $request->input('editor-html-code')
]);
//插入数据到商品图片表
$images = [];
foreach ($request->img as $img) {
$images[] = new ProductImage(['image' => $img]);
}
$product->images()->saveMany($images);
//插入数据到商品参数表
$product->param()->create([
'param' => serialize($request->param)
]);
}, 5);
} catch (\Exception $e) {
return back()->withInput()->with('danger', $e->getMessage());
}
return redirect(route('admin.mall.product.index'))->with('success', '新增商品成功');
}
//更新商品属性
public function update(ProductPost $request,$id)
{
$product=Product::find($id);
//更改商品表
$product->update($request->all());
//更改商品描述表
$product->description()->update([
'description' => $request->input('description'),
'editor-html-code' => $request->input('editor-html-code')
]);
//更改商品图片表
$product->images()->update([
//????????
]);
//更改商品参数
$product->param()->update([
'param' => serialize($request->param)
]);
}
对于这种一对多关系的更新,无非就两种方式
1、简单粗暴,删除原来的数据,从新新增。因为更新前后,不一定是每个images的内容发生变化,还有可能涉及到关联的images的个数的变更。
2、如果只是更新内容,根据前端上传的内容获取到对应的images对象然后逐个更新