在Laravel Nova中将一张表用于不同的资源

Iva*_*pov 2 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
  • 离题- App\Models\Offtopic\Article扩展App\Models\Abstract\AbstractArticle

该表articles具有一个名为category的字段,并且有3种类型的类别:新闻,摘要,offtopic

除了扩展抽象模型之外,每个资源模型还定义了一个属性,该属性按以下方式属于其类别

/**
 * To which category this article belongs to
 * @var array
 */
protected $attributes = [
    'category'  =>  'news'
];
Run Code Online (Sandbox Code Playgroud)

我在Nova中指定类别下创建文章没有问题,但是,除了显示指定类别中的文章之外,它还显示所有资源中所有类别中的文章。

有没有一种方法只能在给定资源上显示特定类别的文章?

TLDR: 一个抽象模型-> 3个扩展该模型的资源(定义了类别属性)->如何仅在nova资源中显示该类别中的项目?

Sau*_*nam 7

您可以利用Laravel雄辩的查询范围

像下面添加全球范围扩大到所有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
    });
}
Run Code Online (Sandbox Code Playgroud)

希望这会帮助你。