[英]How to update Laravel relation's table
有2種型號:
Product
和Product_Images
class Product extends Eloquent {
protected $guarded = [];
public $timestamps = true;
public function images(){
return $this->hasMany('product_image');
}
public function brand(){
return $this->belongsTo('brand');
}
}
class Product_Image extends Eloquent {
protected $table = 'product_images';
protected $guarded = [];
public function images(){
return $this->hasMany('product_image');
}
}
我可以對此模型進行更新或插入數據
$product = new Product;
$product->title = $data['title'];
$product->alias = $data['alias'];
$product->short_description = $data['short_description'];
$product->price = $data['price'];
$product->brand_id = $data['brand_id'];
$product->description = $data['description'];
$product->published = 1;
$product->save();
foreach($data['images'] as $k => $v){
if($data['main'] == $k){
$product->images()->save(
new Product_Image(['image' => $v,'main' => 1])
);
}else{
$product->images()->save(
new Product_Image(['image' => $v,'main' => 0])
);
}
}
但是當用戶嘗試編輯產品時,用戶可以刪除現有圖像並嘗試添加新圖像並發送表格。 我應該遵循哪種方式來更新圖像關系。 我應該刪除與產品相關的所有圖像並創建新圖像嗎? 對我來說這似乎是一種不好的做法,對此有什么最好的辦法嗎?
首先,您的關系是錯誤的,我認為您與產品和形象有着一對多的關系
所以這應該是
public function images(){
return $this->hasMany('product_image');
}
public function product()
{
return $this->belongsTo(Product::class);//import your product class with use
}
另外,您錯誤地定義了您的關系。 在您的關系中,您可以選擇定義類,在某些情況下,您可以傳遞外鍵和本地鍵以及表名,請參見定義關系
這應該是
public function images(){
return $this->hasMany('product_image');
}
public function brand(){
return $this->belongsTo('brand');
}
這個
public function images(){
return $this->hasMany(Product_Image::class);//import class
}
public function brand(){
return $this->belongsTo(Brand::class);//import Brand class
}
您也可以在這里簡化代碼
if($data['main'] == $k){
$product->images()->save(
new Product_Image(['image' => $v,'main' => 1])
);
}else{
$product->images()->save(
new Product_Image(['image' => $v,'main' => 0])
);
}
$product->images()->save(
new Product_Image(['image' => $v,'main' => (int)($data['main'] == $k)])
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.