Используйте одну таблицу для разных ресурсов в Laravel Nova - PullRequest
0 голосов
/ 14 декабря 2018

Доброе время суток!
Я пытаюсь создать что-то вроде системы блогов внутри 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 имеет поле с именем категория , и есть 3 типа категорий: новости, дайджесты, оффтоп .

Помимо расширения абстрактной модели, каждая модель resource также имеет однуопределен атрибут, то есть это категория следующим образом:

/**
 * To which category this article belongs to
 * @var array
 */
protected $attributes = [
    'category'  =>  'news'
];

У меня нет проблем с созданием статей в указанных категориях в Nova, однако вместо того, чтобы показывать статьи изуказанной категории, он отображает статьи из всех категорий на всех ресурсах.

Есть ли способ показатьразмещать статьи только из определенной категории на данном ресурсе?

TLDR: Одна абстрактная модель -> 3 ресурса, расширяющих эту модель (с определенным атрибутом категории) -> как отображать только элементы из этогокатегория внутри нова ресурса?

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать Laravel eloquent область запроса .

Добавить глобальную область действия, как показано ниже, для всех 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
    });
}

Надеюсь, это поможет вам.

...