一天中的好时光!
我正在尝试在Laravel Nova中创建类似博客系统的内容。
我有一个名为articles
的表以及一个抽象模型AbstractArctile
。
我也有3个类别:
App\Models\News\Article
扩展了App\Models\Abstract\AbstractArticle
App\Models\Digests\Article
扩展了App\Models\Abstract\AbstractArticle
App\Models\Offtopic\Article
扩展了App\Models\Abstract\AbstractArticle
表articles
有一个名为 category 的字段,并且有3种类别:新闻,摘要,无关主题。
除了扩展抽象模型之外,每个 resource 模型还定义了一个属性,该属性以以下方式为类别:
/**
* To which category this article belongs to
* @var array
*/
protected $attributes = [
'category' => 'news'
];
我在Nova中指定类别下创建文章没有问题,但是,除了显示指定类别中的文章之外,它还显示所有资源中所有类别中的文章。
是否可以仅在给定资源上显示特定类别的文章?
TLDR: 一个抽象模型-> 3个扩展该模型的资源(定义了类别属性)->如何仅在nova资源中显示该类别的项目?
答案 0 :(得分:6)
您可以利用Laravel雄辩的query scope。
将如下所示的全局范围添加到所有3个模型(App\Models\News\Article
,App\Models\Digests\Article
,App\Models\Offtopic\Article
)中,这是确保给定模型的每个查询都接收类别约束的简便方法。
protected static function boot()
{
parent::boot();
static::addGlobalScope('category', function (Builder $builder) {
$builder->where('category', 'news'); // Change the value depends on the model
});
}
希望这会对您有所帮助。