Eloquent 来自数据库的两个日期之间,Laravel 4

Eloquent between two dates from database, Laravel 4

我在数据库中有优惠券 table。有 start_date 和 finish_date 来确定凭证或优惠券的有效性。通过获取当天的日期、日期和时间,如果有效期仍然有效,则可以使用凭证或优惠券,如果有效期已过,则无法再次使用凭证或优惠券。 下面是我用来处理代金券或优惠券的源代码,但效果不是很好。 有没有人可以帮助我解决这个问题? 谢谢

public function coupon()
{
    $c = Input::get('coupon');
    $date = Carbon::now();
    $check = StoreVoucher::whereRaw("code = '".$c."'")
    ->whereRaw("status = 1")
    ->whereRaw("start_date", ">=", $date)
    ->whereRaw("finish_date", "<=", $date)
    ->first();
}
public function coupon()
{
    $c = Input::get('coupon');
    $date = Carbon::now();
    $check = StoreVoucher::where("code",$c)
    ->whereStatus(1)
    ->whereDate("start_date", ">=", $date)
    ->whereDate("finish_date", "<=", $date)
    ->first();
}

试试这个

您正在使用 whereRaw,但使用方式有误。

public function coupon()
{
    $c = Input::get('coupon');
    $date = Carbon::now();
    $check = StoreVoucher::whereRaw("code = '".$c."'")
    ->whereRaw("status = 1")
    ->whereRaw("start_date >= '$date'")
    ->whereRaw("finish_date <= '$date'")
    ->first()
}

WhereRaw() 方法将条件作为字符串。

public function coupon() {    
    return StoreVoucher::where('code', Input::get('coupon'))
                         ->where('status', '1')
                         ->where('start_date', '>=', Carbon::now())
                         ->where('finish_date', '<=', Carbon::now())
                         ->first();
}

将此添加到您的 StoreVoucher 模型中:

protected $dates = ['start_date', 'finish_date'];