Astrotomic / laravel-translatable

A Laravel package for multilingual models
https://docs.astrotomic.info/laravel-translatable/
MIT License
1.22k stars 152 forks source link

Route binding #407

Closed carlosvaldesweb closed 2 months ago

carlosvaldesweb commented 2 months ago

How can i use route binding? I Have a BlogController to get post or article, but i want to use Route Binding to get blog by "slug"

public function show(Blog $blog)
    {
        return new BlogResource($blog);
    }

I'm getting

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'slug' in 'where clause'

My Blog model

class Blog extends Model implements TranslatableContract
{
    use HasFactory;
    use SoftDeletes;
    use Translatable;

    protected $fillable = [
        'published',
        'scheduled_at',
    ];

    public $translatedAttributes = [
        'title',
        'content',
        'meta_description',
        'locale',
        'slug',
        'image',
    ];

    public function getRouteKeyName(): string
    {
        return 'slug';
    }
}
Oleksandr-Moik commented 2 months ago

You can override the default query for route binding, for example in my case it looks like

    public function resolveRouteBindingQuery($query, $value, $field = null)
    {
        if (request()->routeIs('filament.*')) {
            return parent::resolveRouteBindingQuery($query, $value, $field);
        }

        return $query->whereTranslation('slug', $value);
    }