我正在用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);
}
OrderDetail模型:
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);
}
SubOption模型:
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(。在购物车中已经存在数量=1的奶茶Size S。如果用户选择奶茶尺寸S并再次添加到购物车中。数量将增加到2。如何在控制器中检查此项。非常感谢大家!
您可以检查此订单是否存在,然后将其添加到数量中并保存,否则创建一个新记录,您还需要一个显示所选选项的"selected_options"输入:
$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();
......
}