如何对laravel中的产品仅应用一次促销代码

如何对laravel中的产品仅应用一次促销代码,laravel,laravel-5,laravel-4,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

我只需要为一个产品应用一次促销代码,当我为同一个产品应用相同的代码时,它不应该被应用

下面是代码:

   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');


    }


}
public function apply\u promo(请求$Request)
{
$name=$request->input();
$code=$name['code'];
$code_flags=0;
$p_id='';
$折扣值=0;
$折扣类型='';
$Object=新升级();
$response=$Object->GetPromotion();
//打印($response);退出;
foreach($value形式的响应['promotions']['promotion']
{
如果($value['code']==$code)
{
$code_flags=1;
$p_id=$value['requires'];
$discount_value=$value['value'];
$discount_type=$value['type'];
}
}
如果($code_flags==1)
{
$p_id_数组=分解(“,”,$p_id);
$flags=0;
$data=json_编码(Cart::content());
$cartdata=json_decode($data);
//echo“”;打印($cartdata);退出;
foreach($cartdataas$key=>$value)
{
如果($value->options->package!='domain')
{   
if(在数组中($value->options->gid,$p\u id\u数组))
{
$flags=0;
$price=$value->price;
如果($折扣类型=='Percentage')
{
$折扣p=($价格*$折扣值)/100);
$price=$price-$price\p;
$value->options->discount\u code=$code;
$value->options->discount\u price=$discount\u p;
$value->options->discount\u percentage=$discount\u value;
购物车::更新($value->rowId,['price'=>$price]);
}
}
}
}
如果($flags==0)
{
session()->put('promo_code',$code);
\会话::flash(“消息”);
返回重定向(“购物车?成功”);
}
}
否则{
session()->put('promo_code','');
\会话::flash('message_error');
返回重定向(“购物车?错误”);
}
}

我尝试过使用上面的代码,但是在这里,代码被应用的次数和我提交代码的次数一样多。请给我一个解决方案。

您可以制作一张表,列出使用过的促销活动及其产品,比如我们将其命名为
产品\u促销活动
拥有
(促销id,产品id)
。 然后在
产品
模型中创建名为
促销代码
(多对多)

此关系将返回此产品使用的所有促销,因此我们现在可以使用此代码检查它以前是否使用过促销

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