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

Laravel Nova - Show the name of the resource in the ID field instead of the actual ID

在 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 查询模型。谁能告诉我如何解决这个问题?

我的解决方法如下:

创建一个包含名字和姓氏的 TextField 以及 returns 使用该实体 ID 的 link。

  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(),

这样它仍然可以link 到带有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表示您希望排序的列。