• Как правильно реализовать локализацию БД в laravel?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    На мой взгляд использование пакетов для этой цели нецелесообразно.
    Обычная полиморфическая связь подойдет.

    И так, давайте представим что основной контент статьи на русском языке.
    Во первых, создадим модель нашей локализации:
    php artisan make:model Localization

    Укажем что это полиморфическая связь:
    protected $table = 'localization';
    
    public function lozalizable()
      {
          return $this->morphTo();
      }


    В нашей модели статей привяжем свежесозданную модель в качестве связи:
    public function lozalization(){
    	    return $this->morphOne('App\Localization', 'lozalizable');
    	}


    И создадим миграцию для модели Lozalizable:
    Schema::create('localization', function (Blueprint $table) {
            $table->increments('id');
            $table->string('field');
            $table->string('language');
            $table->string('value');
            $table->string('lozalizable_type');
            $table->integer('lozalizable_id');
            $table->timestamps();
          });


    Теперь, для создания локализации статьи с языком en выполним следующий код:
    $article = Article::create($Atricle);
    
    $localization = new Localization;
    $localization->language = 'en';
    $localization->field = 'content';
    $localization->value = 'Znachenye na english yazike';
    $article->localization()->save($localization); //привязываем к свежесозданному объекту Article новую локализацию


    С помощью scope функций в модели можно без особых проблем реализовать более удобное выдергивание нужного значения и языка:
    public function scopeGetLocalize($language, $field){
         return $this->localization()->where(['language' => $language, 'field' => $field])-> firstOrFail()->value;
    }


    В таком случае, скажем, поле title для локализации en можно выдергивать так:
    $article->getLocalize('en', 'title')
    Ответ написан
    19 комментариев
  • Оптимальная админка для Laravel. Что думаете по поводу Voyager?

    fomvasss
    @fomvasss Автор вопроса
    PHP developer
    вот уже прошло полугода, от того времени как мной задавался это ответ - могу с уверенностью ответить: все эти готовые админки для фреймворка - это полная фигня, и если решаешь брать админку - то вообще лучше бери вордпрес.
    Ответ написан
    3 комментария
  • Где в Laravel подключается Eloquent?

    Denormalization
    @Denormalization
    Там всё немного сложнее.

    В Illuminate\Database\DatabaseServiceProvider регистрируется DatabaseManager, ConnectionFactory, и EloquentFactory. И потом они там сами друг друга любят.

    Illuminate\Database\Capsule\Manager не используется в самом Laravel, он для внешних проектов придуман/
    Illuminate\Database\Capsule\Manager по сути принимает DatabaseManager который в свою очередь принимает ConnectionFactory который и рулит подключением в зависимости от конфига.
    Ответ написан
    2 комментария