我刚刚在Laravel中启动了一个新项目。我希望它是多语言的,所以有些表为每种语言都有一个字段,例如:
Continent
id
en (for English)
pt (for Portuguese)
es (for Spanish)
因此:
1 'America', 'América', 'America'
2 'Africa', 'África', 'África'
类似地,我有一个“地区”表。
我的大陆模型已经具有:
public function regions() {
return $this->hasMany(Region::class);
}
我的目标是在运行时重命名列,以便可以使用“ Continent->名称”或“ Region->名称”代替“ Continent-> en”和“ Region-> en”。
到目前为止,我可以通过以下方式实现结果:
ContinentController @ index
public function index() {
$lang = 'en';
$continents = DB::table('continents')->rightJoin('regions', 'continent_id', '=', 'continents.id')->select("continents.$lang AS continent_name", "regions.$lang AS region_name")->get();
return view('geo.continents.index', compact('continents'));
}
但是,这给我带来了一张桌子:
@section('content')
@foreach ($continents as $continent)
{{ $continent->region_name }} {{ $continent->continent_name }}
@endforeach
@endsection
Central America (America)
Caribbean (America)
North America (America)
South America (America)
我想使用Eloquent风格完成类似的结果。像这样:
$continents = Continent::select('continents.en AS name')->with('regions')->get();
到目前为止,我可以将大陆名称作为“名称”属性来获取。如何获取区域名称作为“名称”属性,如:
$ continent-> name; $ region->名称;
答案 0 :(得分:1)
您想调查scopes。
// Continent.php
public function scopeRegion($query, $region)
{
return $query->where('region', $region);
}
然后在您的控制器中
Continent::region('en')->get();