如何在Laravel模型中使用带有及其关联关系的范围方法

时间:2019-06-26 12:39:40

标签: laravel eloquent

我的模型中有一个scope方法,其中包含belongsToMany关系;我坚持指出如何在另一个地方使用范围方法过滤多个数据。我的代码是

CoversAlbum.php

public function genres()                                                                
{  
    return $this->belongsToMany(CoversGenre::class,'covers_track_genres'); 
}  

CoversGenre.php

public function albums()
{
    return $this->belongsToMany(CoversAlbum::class,'covers_album_genres');
}     
CoversAlbum.php中的

Scope方法

public function scopeActive($query)
{
    return $query->whereHas('genres', function ($q) {
        $q->where('is_present', true)();
    });
}

我希望所有枢轴covers_genre_id存在。请建议我如何实现它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用has方法:

public function scopeActive($query)
{
    return $query->has('genres');
}

然后您可以这样:

CoversAlbum::active()->get();

这将返回包含至少一个CoversAlbum的{​​{1}}的列表。

有关更多信息:在https://laravel.com/docs/5.8/eloquent-relationships#querying-relations下的CovertsGenre下浏览

答案 1 :(得分:0)

您可以使用wherePivot方法

public function scopeActive($query)
{
    return $this->genres()->wherePivot('is_present', true);
}