Closed MadMikeyB closed 5 years ago
Seems that the Str::singular($name)
in nova/src/Fields/ResourceRelationshipGuesser.php
is causing Meta to be changed to Metum.
I am unsure why it is having to use ResourceRelationshipGuesser
at all though?
Updating to Nova 1.1.7 and Laravel 5.7.12 has not fixed this issue.
Update:
After reading the Nova source I have discovered that I can get around this by doing the following in my fields()
method's return array for my Product
resource:
HasMany::make('ProductMeta', 'metas', ProductMeta::class)
So I have to explicitly pass the relationship method name from the model as the second attribute, and the Nova Resource name as the third attribute.
Full example of the fields()
method app\Nova\Product.php
below:
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
ID::make()->sortable(),
TextWithSlug::make('Title')->sortable()->slug('Slug')->rules('required'),
Slug::make('Slug')->rules('required')->hideFromIndex(),
Slug::make('Sku')->rules('required')->hideFromIndex(),
BelongsTo::make('Category')->rules('required')->sortable(),
Trix::make('Body')->rules('required'),
Text::make('Price')->rules('required'),
Boolean::make('Active')->sortable(),
Boolean::make('Show on Homepage', 'featured')->sortable(),
DateTime::make('Published At')->hideFromIndex(),
MorphMany::make('Images'),
HasMany::make('ProductMeta', 'metas', ProductMeta::class)
];
}
I would still consider this a bug with Nova however, and how it tries to magically figure out the singular/plural of a Model.
Thanks @MadMikeyB. I was just looking into this for using Nova with Corcel. I'm going to give this a shot.
This would be an upstream problem with Laravel itself. Consider raising an issue there so it can be fixed here in Nova land. 😄
@davidhemphill thanks for the reply. I am worried that the way I have worked around the issue is the 'correct' method for dealing with these kinds of issue, and that to 'fix' it in Laravel-land would require a large amount of work for Taylor and co.
My workaround seems to be working fine and I am fine with it, the only problem is that my label()
method does not affect the "Create XXX" buttons. It would be great if when I specify a label()
method that the buttons within the UI use this specified text rather than the "guessed" plural / singular form of the term.
Would you prefer this as a separate issue?
Glad you got it sorted. You can use the singularLabel
method for the button issue, right?
Of course, thank you for pointing that out!
Description:
Meta
in a Model Name is always altered (singularised or pluralised) toMetum
. ProductMetum, PostMetum, ImageMetum. Affecting HasMany and HasOne relationships (that I've tested).Steps To Reproduce:
Make the Model and Migration for Product:
php artisan make:model Models\\Product -m
App\Models\Product.php
create_products_table.php
Make the Model and Migration for Product Meta
php artisan make:model Models\\ProductMeta -m
app\Models\ProductMeta.php
Make the resources:
php artisan nova:resource Product
php artisan nova:resource ProductMeta
Full Stack Trace of error: