Laravel Nova - 在 ID 字段中显示资源名称而不是实际 ID

时间:2021-03-26 09:55:12

标签: laravel laravel-nova

在 Laravel Nova 中是否可以在 ID 字段中显示例如名字和姓氏而不是实际 ID。但后来我仍然希望能够点击它来查询资源并打开该资源的查看页面。 Laravel Nova 在索引页面中显示关系时实际上会自动执行此操作。但是我找不到让 ID 显示为资源名称的方法。

我的 ID 字段是这样制作的:

    ID::make()->sortable(),

我的名字和姓氏字段是这样的:

    Text::make('Firstname')
        ->sortable()
        ->rules('required', 'max:255'),
    Text::make('Lastname')
        ->sortable()
        ->rules('required', 'max:255'),

但是如果我这样写:

    ID::make('Firstname')->sortable(),

它使用名字而不是 ID 查询模型。谁能告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我的解决方法如下:

创建一个包含名字和姓氏的 TextField,并返回一个使用该实体 ID 的链接。

  Text::make('Name', 'firstname', function () {
                $url = \Nova::path()."/resources/{$this->uriKey()}/{$this->id}";
                $name = $this->firstname.' '.$this->lastname;

                return "<a class=\"no-underline dim text-primary font-bold\" href=\"{$url}\">{$name}</a>";
            })->asHtml()
                ->sortable()
                ->hideFromDetail()
                ->hideWhenCreating()
                ->hideWhenCreating(),

这样它仍然可以链接到带有 ID 的资源的详细信息页面。 为了使这个自定义字段可排序,我重写了 indexQuery 函数,如下所示:

public static $defaultSort = 'firstname';

/**
 * Build an "index" query for the given resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
public static function indexQuery(NovaRequest $request, $query)
{
    if (static::$defaultSort && empty($request->get('orderBy'))) {
        $query->getQuery()->orders = [];

        return $query->orderBy(static::$defaultSort);
    }

    return $query;
}

变量 $defaultSort 表示要排序的列。

相关问题