배경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')
(제품을 , ProductTranslation, Language). 내보기에 나는이 같은 제품 목록을 가져 오기하려면 :
내 앱이 현재 App::getLocale()
가 (즉 en
및 de
)로 설정 내용에 따라 제품의 이름을 반환합니다
// get first 20 products, list name and price.
@foreach(Product::take(20)->get() as $product)
{{$product->translations->name}} {{$product->price}}
@endforeach
문제.
저는 Laravel의 Eloquent로 시작 했으므로 정확한 관계를 지정하는 방법이 확실하지 않습니다. (또는 실제로 올바르게 수행하고있는 경우).
내가 Product
사이 ProductTranslation
에서 OneToMany
관계 지정한
내 시도 : 이것은 잘 작동
class Product extends \Eloquent {
protected $with = ['translations'];
public function translations()
{
return $this->hasMany('ProductTranslation');
}
}
을하지만, 모든 번역을 반환합니다 (우리는 현재 로케일을 원하는).
나는 다음 ProductTranslation
와 Language
사이 OneToOne
관계 지정
class ProductTranslation extends \Eloquent {
protected $with = ['language'];
public function language()
{
return $this->hasOne('Language')
->where('code', App::getLocale());
}
}
나는이 작동하지 않습니다 알고를하고 난 다음에 무엇을해야하는지에 난처한 상황에 빠진입니다. 누구든지 더 깨끗한 접근법을 가지고 있습니까? 경로 나 컨트롤러에서
@boubbin에게 말했듯이 모델 내부에 유지할 수 있습니까? 그렇게 훨씬 깨끗합니다. –
@VeraWang 예 코드보기 – Rafael