如何在Laravel中仅对产品应用促销代码

时间:2018-10-24 08:42:03

标签: laravel laravel-5 laravel-4

我只需要对一个产品应用一次促销代码,当我对同一产品应用相同的代码时,则不应应用该促销代码。

找到以下代码:

   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 :(得分:1)

您可以将已使用过的促销及其产品制作成桌子,说我们将其命名为product_promotions( 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();