фонLaravel Красноречивый не может получить простой hasMany отношение рабочего
У меня есть интернациональное DB, которая хранит свои строки для различных языков, как это:
products
id
price
product_translation
id
product_id
language_id
name
description
languages
id
name (e.g. 'English', 'German')
code (e.g. 'en', 'de')
С соответствующими моделями для каждой таблицы (PRODUCT , ProductTranslation, Language). В моих взглядов я хочу принести список продуктов, как это:
// get first 20 products, list name and price.
@foreach(Product::take(20)->get() as $product)
{{$product->translations->name}} {{$product->price}}
@endforeach
Проблема
Мое приложение будет возвращать имена продукта в соответствии с тем, что текущий App::getLocale()
установлен в положение (т.е. en
и de
).
Я только начинаю с Larvel's Eloquent, я не уверен, как указать правильные отношения (или если я действительно делаю это правильно вообще).
Моя попытка
Я определили OneToMany
отношения между ними Product
и ProductTranslation
:
class Product extends \Eloquent {
protected $with = ['translations'];
public function translations()
{
return $this->hasMany('ProductTranslation');
}
}
Это прекрасно работает, но будет возвращать все переводы (мы хотим только текущей локали).
Я тогда указать OneToOne
отношения между ProductTranslation
и Language
:
class ProductTranslation extends \Eloquent {
protected $with = ['language'];
public function language()
{
return $this->hasOne('Language')
->where('code', App::getLocale());
}
}
Я знаю, это не работает, и я озадачен на то, что делать дальше. У кого-нибудь есть более чистый подход?
Как я уже сказал @boubbin, можно ли держать его внутри модели? его намного чище. –
@VeraWang Да, посмотрите мой код – Rafael