При отображении формы модели и ее связи выбора я хочу настроить атрибут заголовка, отображаемый при выборе. В частности, я хочу, чтобы заголовок пользователя возвращался как «имя_фамилия».
Это стандартно:
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');
В 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)');
Действительно ли это единственный путь?
Вы можете использовать метод 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
Спасибо! Не знаю, как я это пропустил, но это именно то, что я искал!