在 Laravel Nova 中为不同的资源使用一张表
Posted
技术标签:
【中文标题】在 Laravel Nova 中为不同的资源使用一张表【英文标题】:Use one table for different resource in Laravel Nova 【发布时间】:2019-05-15 19:03:48 【问题描述】:我正在尝试在 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种类型:news、digests、offtopic。
除了扩展抽象模型外,每个resource模型还定义了一个属性,即category,其方式如下:
/**
* To which category this article belongs to
* @var array
*/
protected $attributes = [
'category' => 'news'
];
我在 Nova 中创建指定类别下的文章没有问题,但是,它不是显示指定类别的文章,而是显示所有资源上所有类别的文章。
有没有办法只显示给定资源上某个类别的文章?
总结
一个抽象模型 -> 3 个扩展该模型的资源(定义了类别属性)-> 如何在 nova 资源中仅显示该类别中的项目?
【问题讨论】:
IIRC,你可以覆盖每个资源中的indexQuery
函数。
【参考方案1】:
你可以使用 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 中为不同的资源使用一张表的主要内容,如果未能解决你的问题,请参考以下文章
用于 Laravel Nova 中同一模型上的两个资源字段的 relatableQuery()