在 Laravel Nova 中对不同的资源使用一个 table
Use one table for different resource in Laravel Nova
我正在尝试在 Laravel Nova 中创建类似博客系统的东西。
我有一个名为 articles
的 table 以及抽象模型 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
table articles
有一个名为 category 的字段,有 3 种类别:news, digests, offtopic .
除了扩展抽象模型外,每个资源模型还定义了一个属性,即类别,其方式如下:
/**
* To which category this article belongs to
* @var array
*/
protected $attributes = [
'category' => 'news'
];
我在 Nova 中创建指定类别下的文章没有问题,但是,它不显示指定类别的文章,而是显示所有资源上所有类别的文章。
有没有办法只显示给定资源上特定类别的文章?
总结
一个抽象模型 -> 扩展该模型的 3 个资源(定义了类别属性) -> 如何在 nova 资源中仅显示该类别的项目?
你可以利用 Laravel eloquent 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
});
}
希望对您有所帮助。
我正在尝试在 Laravel Nova 中创建类似博客系统的东西。
我有一个名为 articles
的 table 以及抽象模型 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
table articles
有一个名为 category 的字段,有 3 种类别:news, digests, offtopic .
除了扩展抽象模型外,每个资源模型还定义了一个属性,即类别,其方式如下:
/**
* To which category this article belongs to
* @var array
*/
protected $attributes = [
'category' => 'news'
];
我在 Nova 中创建指定类别下的文章没有问题,但是,它不显示指定类别的文章,而是显示所有资源上所有类别的文章。
有没有办法只显示给定资源上特定类别的文章?
总结
一个抽象模型 -> 扩展该模型的 3 个资源(定义了类别属性) -> 如何在 nova 资源中仅显示该类别的项目?
你可以利用 Laravel eloquent 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
});
}
希望对您有所帮助。