我有推车系统,一切正常,我唯一的问题是;每个用户可以反复使用相同的优惠券代码。
我想要的是限制每个用户只能使用每张优惠券 一旦,如果用户有多个优惠券代码,则只能使用 其中一个。
这是我的购物车更新功能,我的购物车将使用优惠券代码等进行更新。
public function update(Request $request, $id)
{
// quantity
$qty = $request->input('quantity');
$products = Product::findOrFail($request->proId);
$stock = $products->stock;
$mytime = Carbon::now();
$couponcode = $request->input('coupon');
$catId = Coupon::where('category_id', $products->category_id)
->where('value_to', '>=', $mytime)
->when($couponcode, function ($query) use ($couponcode) {
return $query->where('title', $couponcode);
})
->first();
if (!empty($qty) && !empty($couponcode)) { // 1. if both (quantity and couponcode) are given
if ($qty < $stock && (!is_null($catId) && $catId->title == $couponcode)) { // if quantity < stock AND coupon-code is correct
$coupon = new \Darryldecode\Cart\CartCondition(array(
'name' => $catId->title,
'type' => 'coupon',
'target' => 'item',
'value' => -$catId->amount,
));
Cart::update($id, array(
'quantity' => array(
'relative' => false,
'value' => $qty,
),
));
Cart::addItemCondition($id, $coupon);
Session::flash('success', 'Cart updated.');
return redirect()->route('cart.index');
} elseif ($qty > $stock) {
Session::flash('danger', 'quantity not available!');
return redirect()->route('cart.index');
} else {
Session::flash('danger', 'invalid coupon code!');
return redirect()->route('cart.index');
}
} elseif (!empty($qty)) { // 2. if just quantity is given
if ($qty < $stock) {
Cart::update($id, array(
'quantity' => array(
'relative' => false,
'value' => $qty,
),
));
Session::flash('success', 'Cart updated.');
return redirect()->route('cart.index');
} else {
Session::flash('danger', 'quantity not available!');
return redirect()->route('cart.index');
}
} elseif (!empty($couponcode)) { // 3. if just couponcode is given
if (!is_null($catId) && $catId->title == $couponcode) {
$coupon = new \Darryldecode\Cart\CartCondition(array(
'name' => $catId->title,
'type' => 'coupon',
'target' => 'item',
'value' => -$catId->amount,
));
Cart::addItemCondition($id, $coupon);
Session::flash('success', 'Coupon applied successfully.');
return redirect()->route('cart.index');
} else {
Session::flash('danger', 'invalid coupon code!');
return redirect()->route('cart.index');
}
} else{ // 1. if nothing is given
Session::flash('danger', 'Your request cannot be handle, please try again!');
return redirect()->route('cart.index');
}
}
我想出了这个查询,以获取我的购物车商品条件名称
$cartItems = Cart::getContent();
foreach($cartItems as $item)
{
if(is_array($item['conditions']) && !empty($item['conditions'])) {
$temp = [];
foreach($item['conditions'] as $key => $value)
{
$temp[]=[
'name' => $value->getName(),
];
}
$item['_conditions'] = $temp;
foreach($item['_conditions'] as $itessm)
{
$copname[] = $itessm['name'];
}
}
}
现在$copname
是条件名称,存储在我的购物车会话中,我需要更改我的功能(上图)以便比较输入优惠券,看看我的条件是否存在,如果不是让用户添加它,但已经存在返回错误。
类似的东西:
if( $couponcode == $copname )
任何想法?
我将代码更改为:
$cartItems = Cart::getContent();
foreach($cartItems as $item)
{
if(is_array($item['conditions']) && !empty($item['conditions'])) {
$temp = [];
foreach($item['conditions'] as $key )
{
$temp[] = $key['name'];
}
}
}
我得到的结果如下:
如果不存在条件:[]
如果存在条件:array 2: 0 => 'xxxx', and so on
然后我改变了我的更新功能,如:
$cartItems = Cart::getContent();
foreach($cartItems as $item)
{
if(is_array($item['conditions']) && !empty($item['conditions'])) {
$temp = [];
foreach($item['conditions'] as $key )
{
// $temp[] = $key['name'];
$temp[] = $key['name'];
}
$item['_conditions'] = $temp;
}
}
//this IF has added
if($couponcode == $item['_conditions']){
Session::flash('danger', 'You already used this coupon, you cannot use it again!');
return redirect()->route('cart.index');
}else{
$catId = Coupon::where('category_id', $products->category_id)
->where('value_to', '>=', $mytime)
->when($couponcode, function ($query) use ($couponcode) {
return $query->where('title', $couponcode);
})
->first();
}
现在问题在于我得到了这个错误:
不能使用Darryldecode \ Cart \ CartCondition类型的对象作为数组
人
答案 0 :(得分:0)
您应该这样做,以便用户只能在登录后使用优惠券。
一旦他们使用优惠券,只需将其存储到数据库中,并将其与用户帐户相关联。
当他们进入优惠券输入页面时,一旦他们输入优惠券详细信息,请拨打ajax电话并检查优惠券是否对他们有效使用。
如果您正在使用的应用程序是开箱即用的软件,我个人会创建一个名为UsedCoupon的表,并为其提供至少2列UserId和CouponCode。我会在那里存储我用过的代码。
如果从头开始创建应用程序,您可能会以更加非规范化的方式存储使用过的优惠券数据。