Как привести коллекцию Laravel к нужному виду?

Написал систему локализации на Laravel. Суть в том что в определённых сущностных есть полиморфные связи с таблицей локализации в которой есть тип поля (Заголовок, описания..), его значения (Сам заголовок или описания) и код языка локализации. В контроллере получаю, к примеру категории таким образом:
$categories = Category::with('locale')->get();
в шаблоне блейда получиния значиния поля выглядит так:
{{$category->locale[0]['field_value']}}
Индекс - это локализация.
Как сделать так что бы я мог написать так:
{{$category->locale["en"]['field_value']}}
Или же может нужно саму логики локализации менять?
Спасибо за внимание!
  • Вопрос задан
  • 188 просмотров
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
1. Создайте scope для модели Locale аля
public function scopeOfLocale(Builder $builder, $locale = 'en'){
        return $builder->where('code', '=', $locale);
}


2. Создайте middleware аля AddLocaleScope

public function handle($request, Closure $next)
    {
         Locale::addGlobalScope('locale', function (Builder $builder){
            $builder->ofLocale(app()->getLocale());
        });
    }

И вешайте их на все контроллеры где нужна подгрузка локали.

Можно другой вариант. Привести отношения у модели Category

public function locales(){
     return $this->hasMany(Locale::class);
}

public function current_locale(){
     return $this->hasOne(Locale::class)->ofLocale(app()->getLocale());
}


И юзать когда нужна текущая локаль
$categories = Category::with('current_locale')->get();


И когда нужны все локали
$categories = Category::with('locales')->get();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект