Astrotomic / laravel-translatable

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

Translations are not saved even though dd() and return show them correctly #359

Closed jordantsap closed 1 year ago

jordantsap commented 1 year ago

I used the 2nd tutorial in the README file to build the site: https://mydnic.be/post/how-to-build-an-efficient-and-seo-friendly-multilingual-architecture-for-your-laravel-application

I have an accommodation model with AccommodationTranslation: Accommodation: https://github.com/jordantsap/karvali/blob/main/app/Models/Accommodation.php AccommodationTable: https://github.com/jordantsap/karvali/blob/main/database/migrations/2023_07_29_183151_create_accommodations_table.php AccommodationTranslation model: https://github.com/jordantsap/karvali/blob/main/app/Models/Translations/AccommodationTranslation.php AccommodationTranslationTable: https://github.com/jordantsap/karvali/blob/main/database/migrations/2023_07_29_183603_create_accommodation_translations_table.php

Main model code:

protected $guarded = [];
//     public $primaryKey = 'slug';

    protected $translatedAttributes  = [
        'title',
        'slug',
//        'meta_keywords',
//        'meta_description',
    ];

Translation model code:


public $timestamps = false;

    protected $fillable = [
        'title',
        'slug',
        'meta_keywords',
        'meta_description',
    ]; ````
In my Create.blade.php file i have the input names as:
@foreach (config('translatable.locales') as $locale => $lang)

                            <div class="form-group{{ $errors->has('title') ? ' has-error' : '' }}">
                                <label for="title" class="control-label">{{ __('form.title') }} ({{$lang}})</label>
                                <input id="title" type="text" class="form-control" name="{{$locale}}[title]" value="{{ old('title') }}" required>

                                @if ($errors->has('title'))
                                    <span class="help-block">
                          <strong>{{ $errors->first('title') }}</strong>
                      </span>
                                @endif
                            </div>
@endforeach
Controller code to store Accommodation fields:
I have try various code but the translation model is not saved, only the main model fields
The code that i tryed is:
return $request->all();
//        dd($request->all());
        // $accommodation = new Accommodation();
        // $accommodation->user_id = $request->user_id;
        // $accommodation->active = $request->active;
        // $accommodation->accommodation_type_id = $request->accommodation_type_id;
        // $accommodation->website = $request->website;
        // $accommodation->telephone = $request->telephone;
        // $accommodation->facebook = $request->facebook;
        // $accommodation->twitter = $request->twitter;
        // $accommodation->email = $request->email;
        // $accommodation->total_rooms = $request->total_rooms;

        // $accommodation->{'title:en'} = $request->title;
        // $accommodation->{'slug:en'} = \Str::slug($request->title, '-');
        // $accommodation->{'meta_description:en'} = $request->meta_description;
        // $accommodation->{'meta_keywords:en'} = $request->meta_keywords;
        // $accommodation->{'meta_keywords:en'} = $request->meta_keywords;
        // $accommodation->{'manager:en'} = $request->manager;
        // $accommodation->{'description:en'} = $request->description;

        // $accommodation->{'title:el'} = $request->title;
        // $accommodation->{'slug:el'} = \Str::slug($request->title, '-');
        // $accommodation->{'meta_description:el'} = $request->meta_description;
        // $accommodation->{'meta_keywords:el'} = $request->meta_keywords;
        // $accommodation->{'meta_keywords:el'} = $request->meta_keywords;
        // $accommodation->{'manager:el'} = $request->manager;
        // $accommodation->{'description:el'} = $request->description;

        // $accommodation->save();
jordantsap commented 1 year ago

Solution = $accommodation->translateOrNew($locale)->title = $request->{$locale}['title'];