首页 文章

Laravel nova覆盖/设置Fields或Has Through关系的自定义值

提问于
浏览
1

我正在使用Laravel开发Web应用程序 . 对于管理面板,我使用的是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关系 . 但我在Nova中找不到它 . 所以,我不能用它 . 第二种解决方案是覆盖渲染上的字段值 . 像这样的东西 .

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 回答

  • 1

    假设您已正确定义了关系 sub_categoryparent_category .

    Item 模型中定义关系,如下所示

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

    然后在 Item 资源中使用它,如下所示 .

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

相关问题