Laravel nova переопределение / установка пользовательского значения для отношений Fields или Has Through - PullRequest
0 голосов
/ 02 ноября 2018

Я занимаюсь разработкой веб-приложения с использованием Laravel. Для админки я использую Laravel Nova. Сейчас я пытаюсь использовать данные из таблицы, которая связана с другой таблицей. Чтобы быть понятным, см. Мою структуру базы данных ниже.

items
=====
id
name
price
sub_category_id

sub_categories
==============
id
name
parent_category_id

parent_categories
=================
id
name

В Nova я пытаюсь добиться того, чтобы я хотел отобразить имя родительской категории элемента на странице индекса / списка элементов. Первое, что я не хочу создавать пользовательский атрибут что-то вроде этого в модели

protected $appends = [
        'parent_category_name'
    ];

function getParentCategoryNameAttribute()
{
    //code here
}

Следовательно, я могу придумать два решения. Первое решение - использование отношения HasThrough. Но я не могу найти это в Новой. Так что я не могу его использовать. Второе решение - переопределение значения поля при рендеринге. Как то так.

Text::make("fieldname")->fillUsing(function($request, $model, $attribute, $requestAttribute) {
                //$model->sub_category->parent_category - then I can return a value
                return "Parent category name";
            })->onlyOnIndex()

Но приведенный выше код не работает. Итак, что будет лучшим подходом для обработки сквозных отношений в Nova?

1 Ответ

0 голосов
/ 12 ноября 2018

Если вы правильно определили отношение sub_category & parent_category.

Определите отношения в Item модели, как показано ниже

public function parent_category()
{
    return $this->sub_category->parent_category();
}

Затем используйте его в Item ресурсе, как показано ниже.

BelongsTo::make('Parent Category')
    ->hideWhenCreating()
    ->hideWhenUpdating(),
...