Приветствую. Реализую мультиязычный функционал новостей на сайте. Есть таблицы:
languages
--id
--iso_code
--name
news
--id
--alias
--published
news_languages
--id
--news_id
--language_id
....
В модели news добавил:
public function newsLanguages()
{
return $this->hasMany('App\NewsLanguage');
}
public function getLanguage($id)
{
if(!$this->languageBug){
$this->languageBug = $this->newsLanguages->keyBy('language_id');
}
return $this->languageBug->get($id) ? $this->languageBug->get($id): new NewsLanguage;
}
public function attachRequest($request)
{
$lng = [];
foreach(\App::make('Language')->getAll() as $language)
{
$l = $this->getLanguage($language->id);
$l->language_id = $language->id;
$l->title = $request->has('title.'.$language->iso_code) ? $request->title[$language->iso_code] : '';
$l->meta_title = $request->has('meta_title.'.$language->iso_code) ? $request->meta_title[$language->iso_code] : '';
$l->meta_description = $request->has('meta_description.'.$language->iso_code) ? $request->meta_description[$language->iso_code] : '';
$l->content = $request->has('content.'.$language->iso_code) ? $request->content[$language->iso_code] : '';
$lng[] = $l;
}
$this->alias = $request->alias;
$this->published = $request->published;
$this->save();
$this->newsLanguages()->saveMany($lng);
}
Работа с моделью происходит через метод Route::resourse(...) На обновление и создание новости - один шаблон, один валидатор, один метод Контроллер, имеет методы:
public function create(News $news, NewsRequest $request)
{
$news->attachRequest($request);
}
public function update(News $news, NewsRequest $request)
{
$news->attachRequest($request);
}
Форма отображается через laravel form collective:
{!! Form::model($news, ['route' => [ $news->id ? 'admin.news.update' : 'admin.news.store', $news], 'method' => $news->id ? 'PUT' : 'POST', 'files' => true]) !!}
...
{!!Form::label('alias', 'Алиас')!!}
{!!Form::text('alias', $news->alias, ['class' => 'form-control'])!!}
@if ($errors->has('alias'))
<span class="help-block">{{ $errors->first('alias') }}</span>
@endif
...
@foreach ($languages as $language)
...
<?php $lang = $news->getLanguage($language->id);?>
{!!Form::label('title'.$language->iso_code.'', 'Заголовок')!!}
{!!Form::text('title['.$language->iso_code.']', $lang->title, ['class' => 'form-control'])!!}
...
@endforeach
{!!Form::submit( $news->id ? 'Обновить' :'Создать',['class' => 'btn btn-primary'])!!}
...
Все работает. Но решение как по мне - костыльное. Возможно ли как-нибудь правильнее получать пустые модели newsLanguages добавив в связи таблицу languages? Ведь при создании новости или если в будущем добавится язык - связи будут пусты. За любые комментарии, по теме или исправлению качества кода - буду благодарен.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите, пожалуйста, разобраться с задачейЕсть файл в котором, например, 5 строк
Есть такой код и я не понимаю, что он делает, но он магическим образом выводит карусель с даннымиЗаказчик прислал мне правки в которых надо,...
Включил интегрированную Ubuntu в Win10, установил LAMP-стек, но столкнулся с проблемой - я не знаю как в шторм добавить интерпретатор PHP, установленный...
Имеется такой роут, но регулярка для hash не срабатывает на хэшВ чем проблема?