Увеличьте количество еды, если пользователь добавит в корзину тот же самый вариант еды Laravel - PullRequest
0 голосов
/ 15 декабря 2018

Я строю паутину для заказа еды с 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 is Размер и SubOption являютсяS ($ 0), M ($ 1), L ($ 1,5).В корзине уже есть Молочный чай Размер S с количеством = 1. Если пользователь выберет Молочный чай Размер S и снова добавьте его в корзину.количество увеличится до 2. Как это проверить в контроллере.Спасибо всем большое!

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете проверить, существует ли этот заказ, затем добавить его к количеству и сохранить его, в противном случае создайте новую запись, вам также потребуется ввод '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();
        ......
    }
...