【问题标题】:Use one table for different resource in Laravel Nova在 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函数。

标签: php laravel eloquent laravel-nova


【解决方案1】:

你可以使用 Laravel eloquent 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
    });
}

希望这会对你有所帮助。

【讨论】:

  • 完美解决方案!非常感谢!
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 2019-12-08
  • 2019-11-14
相关资源
最近更新 更多