首页 > 解决方案 > 如果用户将相同的食物选项添加到购物车中,则增加食物数量 Laravel

问题描述

我正在用 laravel 建立网络订购食物。如果用户将购物车中的相同食物添加到购物车中,则食物数量会增加。我创建了 3 个模型:OrderDetail、OrderOptionDetail、SubOption

食品型号:

public function food_options(){
    return $this->hasMany(FoodOption::class);
}
public function order_detail(){
    return $this->hasMany(OrderDetail::class);
}

FoodOption 型号:

public function sub_options(){
    return $this->hasMany(SubOption::class);
}

订单详情模型:

protected $fillable = [
    'order_id','food_id', 'quantity'
];
public function order_option_detail(){
    return $this->hasMany(OrderOptionDetail::class);
}
public function food(){
    return $this->belongsTo(Food::class);
}

OrderOptionDetail 型号:

protected $fillable = [
    'order_detail_id', 'option_id','sub_option_id'
];
public function sub_option(){
    return $this->belongsTo(SubOption::class);
}

子选项模型:

 use Translatable;

public $translatedAttributes = [
    'name'
];
protected $fillable = [
    'food_option_id',
    'price'
];

在控制器中:

public function Order(Request $request){
        $orderDetail =  OrderDetail::where(['food_id' => $request->input('food'), 'order_id' => $order->id])->get();
        ...
        if(...){
            $orderDetail1->quantity += 1;
            $orderDetail1->save();
        }
    }

例如:奶茶有 FoodOption 是 Size 和 SubOption 是 S ($0), M($1), L ($1.5)。购物车中已经存在奶茶尺寸 S 数量 = 1。如果用户选择奶茶尺寸 S 并再次添加到购物车。数量将增加到 2。如何在控制器中检查。谢谢大家,太感谢了!

标签: phplaravelrelation

解决方案


您可以检查此订单是否存在,然后将其添加到数量并保存,否则创建一个新记录,您还需要一个显示所选选项的“selected_option”输入:

        $orderDetail =  OrderDetail::where(['food_id' => $request->input('food'), 
        'order_id' => $order->id])->first();
        $check = $orderDetail->sub_option->where("food_option_id",$request->input('selected_option'));
    ...
    if($check->exists()){
        //$orderDetail =  OrderDetail::where(['food_id' => $request->input('food'), 
        //'order_id' => $order->id])->first();
        $orderDetail1->quantity += 1;
        $orderDetail1->save();
    }else{
        $orderDetail = new OrderDetail();
        ......
    }

推荐阅读