Laravel Nova: раздел для отображения столбца другой таблицы - PullRequest
0 голосов
/ 25 января 2019

Я использую раздел Laravel Nova, чтобы показать количество элементов в категории.

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

Это отлично работает, но, конечно, отображает на экране category_id.

enter image description here Я бы хотел показать название категории.

Модель построена следующим образом:

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 Category определено следующее:

public static $title = 'category_name';

Как я могу показать название категории вместо идентификатора категории?

1 Ответ

0 голосов
/ 25 января 2019

Из документации

Часто значения столбцов, которые разделяют показатели вашего раздела на группы, будут простыми ключами, а не чем-то, что "удобно для человека".Или, если вы отображаете метрику раздела, сгруппированную по столбцу, который является логическим, Nova будет отображать метки вашей группы как «0» и «1».По этой причине Nova позволяет вам предоставить Closure, который форматирует метку во что-то более читаемое:

/**
 * 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; 
        });
}
...