在Laravel Nova

时间:2018-12-14 13:44:28

标签: php laravel eloquent laravel-nova

一天中的好时光!
我正在尝试在Laravel Nova中创建类似博客系统的内容。

我有一个名为articles的表以及一个抽象模型AbstractArctile
我也有3个类别:

  • 新闻- App\Models\News\Article扩展了App\Models\Abstract\AbstractArticle
  • 摘要- App\Models\Digests\Article扩展了App\Models\Abstract\AbstractArticle
  • Offtopic- 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资源中显示该类别的项目?

1 个答案:

答案 0 :(得分:6)

您可以利用Laravel雄辩的query scope

将如下所示的全局范围添加到所有3个模型(App\Models\News\ArticleApp\Models\Digests\ArticleApp\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
    });
}

希望这会对您有所帮助。