skelag / laravel-translatable-model
v0.3.3
2022-04-26 08:05 UTC
Requires
- php: >=7.4
- laravel/framework: >=7.0
README
Библиотека позволяет использовать Eloquent модели для удобного хранения переводов
Установка
С помощью композера
composer require skelag/laravel-translatable-model
Использование
Настройка таблиц и моделей
Для использования моделей с переводами необходимо создать таблицу с основной сущностью:
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateBooksTable extends Migration { public function up() { Schema::create('books', function (Blueprint $table) { $table->id(); $table->date('written_at')->default(now()); $table->timestamps(); }); $this->translates('books', ['author' => 'string', 'name' => 'string']); } public function down() { $this->dropTranslates('books'); Schema::dropIfExists('books'); } }
Далее просто наследуем у основной модели класс TranslatableModel
:
namespace App\Models; use SkelaG\LaravelTranslatableModel\Models\TranslatableModel; class Book extends TranslatableModel { }
И модель для переводов снаследовать TranslationModel
, указав fillable и переводимые поля (Должны быть обязательно fillable):
namespace App\Models; use SkelaG\LaravelTranslatableModel\Models\TranslationModel; class BookTranslation extends TranslationModel { protected array $translatable = ['name', 'author']; }
Использование моделей
Создание
App::setLocale('ru'); $book = \App\Models\Book::create([ 'written_at' => \Carbon\Carbon::parse('1833-01-01'), 'author' => 'Александр Сергеевич Пушкин', 'name' => 'Евгений Онегин' ]);
Или:
App::setLocale('ru'); $book = new \App\Models\Book(); $book->author = 'Александр Сергеевич Пушкин'; $book->name = 'Евгений Онегин'; $book->save();
Добавление переводов
Необходимо установить нужную локаль и выполнить обновление модели
App::setLocale('en'); $book = \App\Models\Book::first(); $book->update(['author' => 'Alexander Sergeyevich Pushkin', 'name' => 'Eugene Onegin']);
или
App::setLocale('en'); $book = \App\Models\Book::first(); $book->author = 'Alexander Sergeyevich Pushkin'; $book->name = 'Eugene Onegin';
Обновление значений в переводах происходит так же