Как применить промокод только один раз для товара в laravel - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно применить промо-код только один раз для продукта, когда я применяю тот же код для того же продукта, который не должен применяться.

Найдите под кодом:

   public function apply_promo(Request $request)
{
    $name = $request->input();
    $code=$name['code'];
    $code_flags=0;
    $p_id='';
    $discount_value=0;
    $discount_type='';
    $Object = new Promotion();
    $response = $Object->GetPromotion();
    //print_r($response);exit;
    foreach($response['promotions']['promotion'] as $value)
    {
        if($value['code']==$code)
        {
            $code_flags=1;
            $p_id=$value['requires'];
            $discount_value=$value['value'];
            $discount_type=$value['type'];
        }
    }
    if($code_flags==1)
    {
        $p_id_array=explode(',',$p_id);
        $flags=0;
        $data=json_encode(Cart::content());
        $cartdata=json_decode($data);
    //echo "<pre>";print_r($cartdata);exit;
    foreach($cartdata as $key => $value)
    {
            if($value->options->package != 'domain')
                {   
                if(in_array($value->options->gid,$p_id_array))  
                    {
                        $flags=0;
                        $price=$value->price;
                            if($discount_type=='Percentage')
                                {
                                   $discount_p=(($price*$discount_value)/100);
                                   $price=$price-$discount_p;
                                   $value->options->discount_code = $code;
                                   $value->options->discount_price = $discount_p;
                                   $value->options->discount_percentage = $discount_value;
                                   Cart::update($value->rowId, ['price' => $price]);

                                }
                    }
                }


    }
    if($flags==0)
    {
        session()->put('promo_code', $code);
        \Session::flash('message');
        return redirect('cart?success');
    }
    }
    else{
        session()->put('promo_code', '');
        \Session::flash('message_error');
        return redirect('cart?error');


    }


}

Я пытался использовать приведенный выше код, но здесь код применяется столько раз, сколько я отправляю код.Пожалуйста, предложите мне решение, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете составить таблицу использованных рекламных акций и их продуктов, скажем, мы назовем это product_promotions have ( promo_id , product_id ).затем в product модели создать отношение с именем promocodes (many to many)

public function promocodes(){
 return $this->belongsToMany(Promo::class)->withPivot(['promo_id']);
}

это отношение будет возвращать все рекламные акции, используемые этими продуктами, поэтому теперь мы можем проверить, использовался ли ранее рекламный ролик с использованием этого кода

$product->promocodes()->where('promo_id' , $your_promo_code_id)->exists();
...