在WhereHas Laravel 5.5中调用相关模型的范围

时间:2018-01-10 13:51:25

标签: php laravel lumen

我正在使用Lumen 5.5并希望创建一个范围,将查询限制为另一个模型中的约束。这是我的相关代码。

发布模型:

public function user()
{
    return $this->belongsTo('App\User', 'user-id', 'user-id');
}
public function scopeActive()
{
    return $this->where('status', '=', '1')->whereHas('user', function($q) {
        $q->activeUser();
    });
}

在用户模型中:

public function posts()
{
    return $this->hasMany('App\Post', 'user-id');
}
public function scopeActiveUser()
{
    return $this->whereDate('seen', '>=', date('Y-m-d', strtotime('-1 months')));
}

似乎没有触发Post模型中activeUser()中的whereHas

activeUser()取代whereDate('seen', '>=', date('Y-m-d', strtotime('-1 months')))可以正常工作,但却错过了Lumen / Laravel的范围界定功能。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

按照in the docs

所述添加$query部分
public function scopeActive($query)
{
    return $query->where('status', '=', '1')->whereHas('user', function($q) {
        $q->activeUser();
    });
}

public function scopeActiveUser($query)
{
    return $query->whereDate('seen', '>=', date('Y-m-d', strtotime('-1 months')));
}