簡體   English   中英

如何更新Laravel關系表

[英]How to update Laravel relation's table

有2種型號:

ProductProduct_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM