【发布时间】:2020-11-17 05:32:12
【问题描述】:
users 表有以下列:
- created_at(时间戳)
- last_order(时间戳)
当创建新用户时,last_order 为空,created_at 为当前时间戳。 当用户下订单时,最后一个订单列将更新为下订单时间的时间戳。 现在我想检索过去 7 天没有下任何订单的所有用户。我将我的用户模型定义如下:
class User extends Model
{
/**
* @var string The database table used by the model.
*/
public $table = 'users';
/**
* @var array Validation rules
*/
public $rules = [
];
public $hasMany = [
'voucher' => ['ItScholarBd\Api\Models\Voucher'],
'order' => ['ItScholarBd\Api\Models\OrderLog']
];
public function scopeCustomer($query)
{
return $query->where('role_id', '=', 5);
}
public function scopeNew($query,$days)
{
return $query->where('created_at', '>=', Carbon::now()->subDays($days));
}
public function scopeIdle($query,$days)
{
$dayOffset = Carbon::now()->subDays($days);
return $query->where(function($q,$dayOffset){
$q->whereNull('last_order')
->where('created_at','<',$dayOffset);
})->orWhere(function($q,$days){
$q->whereNotNull('last_order')
->whereRaw("DATEDIFF(created_at,last_order)>$days");
});
}
}
这里scopeNew() 工作正常,但scopeIdle() 抛出以下错误:
Type error: Too few arguments to function App\User::App\{closure}(),
1 passed in .\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php on line 222 and exactly 2 expected
【问题讨论】:
标签: php laravel laravel-query-builder