Laravel Nova:分区以显示其他表的列

时间:2019-01-25 09:49:44

标签: laravel laravel-nova

我正在使用Laravel Nova分区来显示每个类别的项目数量。

public function calculate(Request $request) {
   return $this->count($request, Item::class, 'category_id');
}

这可以正常工作,但是在屏幕上当然会显示category_id。

enter image description here 我宁愿显示category_name。

该模型的构建如下:

class Item extends Model 
{
    public function category()
    {
        return $this->belongsTo('App\Category');
    }
 }

class Category extends Model
{
    public function item()
    {
        return $this->hasMany('App\Item');
    }   
}

此外,我在Nova类别资源中定义了以下内容:

public static $title = 'category_name';

如何显示类别名称而不是类别ID?

1 个答案:

答案 0 :(得分:2)

documentation

  

通常,将分区指标划分为的列值   组将是简单的键,而不是“人类   友好”。或者,如果您要显示按“   列为布尔值,Nova会将您的组标签显示为“ 0”   和“ 1”。基于这个原因,Nova允许您提供封闭   将标签设置为更易读的格式:

/**
 * Calculate the value of the metric.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return mixed
 */
public function calculate(Request $request)
{
    return $this->count($request, User::class, 'stripe_plan')
            ->label(function ($value) {
                switch ($value) {
                    case null:
                        return 'None';
                    default:
                        return ucfirst($value);
                }
            });
}

因此,在您的情况下,将是这样的:

/**
 * Calculate the value of the metric.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return mixed
 */
public function calculate(Request $request)
{
    return $this->count($request, Item::class, 'category_id');
        ->label(function ($value) {
            // Get your category name here
            // For example: return \App\Category::find($value)->name; 
        });
}