771*_*120 1 php laravel eloquent laravel-4
使用英语后备选项创建多语言网站.
我有一张桌子"语言"
__________________
|language | text |
------------------
| "EN" | "good" |
------------------
| "NL" | "goed" |
------------------
Run Code Online (Sandbox Code Playgroud)
我在控制器中的雄辩查询是:
Languages::language('EN')->take(1)->get();
Run Code Online (Sandbox Code Playgroud)
在模型语言中,我有一个范围功能:
public function scopeLanguage($query, $language)
{
$query->where('language', '=', $language);
}
Run Code Online (Sandbox Code Playgroud)
哪作得很完美.但是当我尝试查询表中不存在的语言时.例如:
Languages::language('DE')->take(1)->get();
Run Code Online (Sandbox Code Playgroud)
它没有返回任何结果,但我想要回退到"EN"
我尝试过这样的事情:
public function scopeLanguage($query, $language)
{
$query->where('language', '=', $language);
if ($query->count() > 0) {
return $query;
} else {
return $query->where('language', '=', "EN");
}
}
Run Code Online (Sandbox Code Playgroud)
没有运气,似乎它添加了新的查询现有的.我可以删除/更改where查询吗?不破坏链(实际模型有多个范围功能)
你可以试试这个:
public function scopeLanguage($query, $language)
{
$q = clone $query;
$q->where('language', '=', $language);
if ($q->count() > 0) {
return $query->where('language', '=', $language);
} else {
return $query->where('language', '=', "EN");
}
}
Run Code Online (Sandbox Code Playgroud)
因为它正在工作,它也可以简化一点
public function scopeLanguage($query, $language)
{
$q = clone $query;
$q->where('language', '=', $language);
if ($q->count() == 0) {
$language = 'EN';
}
return $query->where('language', '=', $language);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1797 次 |
最近记录: |