在 laravel 5.3 中更新一对多关系



我想更新一对多关系。例如,我有一个名为"产品">的模型

class Product extends Model
{
    protected $primaryKey = 'product_id';
    public $timestamps = FALSE;
    public function Size(){
        return $this->hasMany('AppSize');
    }
}

和一个名为 Size 的模型

class Size extends Model
{
    public $timestamps = FALSE;
    protected $fillable = ['product_id','size'];
    public function Product(){
        return $this->belongsTo('AppProduct');
    }

这是我的控制器:

public function update(Request $request){
    for($i = 1; $i <= $sizeCounter; $i++){
        $selectedSize = "size_$i";
        if($request->$selectedSize){
            $array = ['size'=> $request->$selectedSize];
        }
    }
    $Size = Size::where('product_id' , $request->id)->update($array);
}

但是它正在做什么,将具有所选产品ID的所有大小记录更新到最后一个输入者大小。我想用不同的尺寸而不是最后选择的尺寸更新所有尺寸

如何更新特定产品的尺寸。像多对多关系的同步方法一样,有什么方法可以更新记录。

你在循环中覆盖你的$array。在 for 循环之后,$array 可能具有最后一个大小。

通常,您的查询是正确的,但它与执行位置有关。它应该如下所示:

if (isset($request->$selectedSize)) { // or is_int() ?
    $Size = Size::where('product_id', $request->id)->update(['size'=> $request->$selectedSize]);
}

最新更新