Laravel获得尚未更新或在24小时内不存在的关系


Laravel get relationship that hasn't been updated or doesn't exist within 24 hours

>我有 2 个模型:

Users模型hasMany Payments模型

Payments模型belongsTo User模型

我试图吸引一天以上没有付款或从未付款的用户。 因此,最后一个相关Payment需要大于 24 小时,或者根本不存在。

所以我继续创建了一个hasOne帮助程序模型,只获取最新的Payment,但我有点卡住了下一步该去哪里。

我基本上希望能够做User::needsPayment()-get()它会返回所有需要付费的用户,因为他们在 24 小时内没有收到付款或从未收到过付款。

不需要hasOne。您可以使用现有关系和User模型上的查询范围轻松执行此操作:

class User extends Model {
    // payments relationship method
    public function payments() {
        return  $this->hasMany(Payment::class);
    }
    // query scope
    public function scopeNeedsPayment($query) {
        // constrain to users that don't have a payment in the past 24 hours
        $query->whereDoesntHave('payments', function ($query) {
            // below are two versions of the same statement; pick one.
            // the sql version may be more accurate if your web server and
            // your database server are in different timezones.
            // assumes "paid_at" is your field name
            // php version:
            $query->where('paid_at', '>=', date('Y-m-d H:m:s', strtotime('-24 hours')));
            // sql version:
            $query->whereRaw('paid_at >= DATE_SUB(NOW(), INTERVAL 24 HOUR)');
        });
    }
}

定义上述查询范围后,代码User::needsPayment()-get()应提供要查找的记录。