sanis
sanis
FFilament
Created by sanis on 8/8/2023 in #❓┊help
Translatable plugin doesn't support relationship selects
I'm trying to implement a dynamic form where I have select with relationship which has translatable title. However, there is no way to pass the name except passing labels like this:
Select::make('category_uuid')
->relationship('category', 'name')
->getOptionLabelFromRecordUsing(fn($record) => $record->name)
->preload(),
Select::make('category_uuid')
->relationship('category', 'name')
->getOptionLabelFromRecordUsing(fn($record) => $record->name)
->preload(),
So I made some changes in the select component near where options are formed by using function above:
if (in_array(HasTranslations::class, class_uses_recursive($relationship->getRelated())) && !$component->hasOptionLabelFromRecordUsingCallback()) {
if (in_array($relationshipTitleAttribute, $relationship->getRelated()->getTranslatableAttributes())) {
return $relationshipQuery
->get()
->mapWithKeys(static fn (Model $record) => [
$record->{Str::afterLast($keyName, '.')} => $record->getTranslation($relationshipTitleAttribute, $component->getContainer()->getLivewire()->getActiveFormsLocale())
])
->toArray();
}
}

// below goes original code

if ($component->hasOptionLabelFromRecordUsingCallback()) {
return $relationshipQuery
->get()
->mapWithKeys(static fn (Model $record) => [
$record->{Str::afterLast($keyName, '.')} => $component->getOptionLabelFromRecord($record),
])
->toArray();
}
if (in_array(HasTranslations::class, class_uses_recursive($relationship->getRelated())) && !$component->hasOptionLabelFromRecordUsingCallback()) {
if (in_array($relationshipTitleAttribute, $relationship->getRelated()->getTranslatableAttributes())) {
return $relationshipQuery
->get()
->mapWithKeys(static fn (Model $record) => [
$record->{Str::afterLast($keyName, '.')} => $record->getTranslation($relationshipTitleAttribute, $component->getContainer()->getLivewire()->getActiveFormsLocale())
])
->toArray();
}
}

// below goes original code

if ($component->hasOptionLabelFromRecordUsingCallback()) {
return $relationshipQuery
->get()
->mapWithKeys(static fn (Model $record) => [
$record->{Str::afterLast($keyName, '.')} => $component->getOptionLabelFromRecord($record),
])
->toArray();
}
Is there a better way to get this supported by default from plugin or by the filament form builder itself? Because from my point of view now I'm locked with current version of the Select component, because this hook is in the middle of the big callbacks hell, which forces me to reuse quite a lot of code which I don't need.
5 replies
FFilament
Created by sanis on 7/25/2023 in #❓┊help
Select of relationship gives "call on null"
Hello, I'm building pretty simple case for an admin panel where Ingredient BelongsTo Menu, so basically I have created an actions EditIngridient and CreateIngridient which returns form of couple fields. One of them is relation of menu. However on edit page/create page I'm getting an error Call to a member function menu() on null. This is my Ingredient descriptions: https://gist.github.com/sanis/c8e0c0a28acd2892c5a3db70a18bc1e3 And this is flare errors: https://flareapp.io/share/4m4BV1Z7 https://flareapp.io/share/VmeMWnzm Any ideas how to fix it and why this is happening? Using filament beta 9.
11 replies