Атрибут заголовка связи Laravel Filament

При отображении формы модели и ее связи выбора я хочу настроить атрибут заголовка, отображаемый при выборе. В частности, я хочу, чтобы заголовок пользователя возвращался как «имя_фамилия».

Это стандартно:

public static function form(Form $form): Form
    {
        return $form
            ->schema([
                Select::make('user_id')
                    ->relationship('user', 'first_name')
                    ->required(),
                TextInput::make('name')
                    ->required()
                    ->maxLength(255),
            ]);
    }

и он возвращает что-то вроде этого но мне нужны имя и фамилия, а не только имя.

Я видел Laravel — Filament: получение отдельных значений столбца отношений что заставило меня подумать, что я мог бы сделать какой-то запрос, например

->relationship('user', 'first_name', function(Builder $query) {
                        $query->select('id', 'first_name', 'last_name', 'email');

but nothing seems to work because you still call the column in the 2nd argument to query... I can do a query and where, and it will filter by the where clause...

В Laravel nova вы можете легко это сделать. https://nova.laravel.com/docs/resources/relationships.html#title-attributes-1

public static $title = 'name';
/**
 * Get the value that should be displayed to represent the resource.
 *
 * @return string
 */
public function title()
{
    return $this->first_name . ' ' . $this->last_name;
}

Однако с нитью это не представляется возможным. я видел https://filamentphp.com/docs/3.x/panels/resources/relation-managers, но, похоже, это работает только на странице менеджера отношений.

Поскольку предполагается, что этот второй аргумент является именем столбца, было предложено создать такой виртуальный столбец:

$table->string('full_name')->virtualAs('concat(first_name, \' \', last_name)');

Действительно ли это единственный путь?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
933
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать метод getOptionLabelFromRecordUsing(), чтобы преобразовать модель Eloquent опциона в метку.

->getOptionLabelFromRecordUsing(fn (Model $record) => "{$record->first_name} {$record->last_name}")

Документы: https://filamentphp.com/docs/3.x/forms/fields/select#customizing-the-relationship-option-labels

Спасибо! Не знаю, как я это пропустил, но это именно то, что я искал!

Ryan M 03.05.2024 09:10

Другие вопросы по теме