【发布时间】:2014-11-27 09:39:58
【问题描述】:
制作一个多语言网站,并提供英语回退选项。
我有一个“语言”表
__________________
|language | text |
------------------
| "EN" | "good" |
------------------
| "NL" | "goed" |
------------------
我在控制器中的雄辩查询是:
Languages::language('EN')->take(1)->get();
在模型语言中,我有一个作用域函数:
public function scopeLanguage($query, $language)
{
$query->where('language', '=', $language);
}
效果很好。但是当我尝试查询表中不存在的语言时。 例如:
Languages::language('DE')->take(1)->get();
它不返回任何结果,但我想回退到“EN”
我试过这样的事情:
public function scopeLanguage($query, $language)
{
$query->where('language', '=', $language);
if ($query->count() > 0) {
return $query;
} else {
return $query->where('language', '=', "EN");
}
}
没有运气,它似乎将新的 where 查询添加到现有查询中。 我可以删除/更改 where 查询吗?不断链(实际模型有多个作用域函数)
【问题讨论】:
-
尝试在你的作用域函数中添加
->get(),不执行我猜没有结果也没有计数 -
在范围内进行操作意味着您将忽略稍后应用的其他
wheres(或范围),因此不是这样。 -
如果它在查询中添加
where条件,您可以将其替换为orWhere,它会正常工作。 -
@danny 你的意思是 $query->where('language', '=', $language)->get();?以及“不执行”是什么意思,顺便说一句,如果我在 else 中退出它,计数确实有效。感谢您的帮助
-
你需要单行还是真的想要
get那里?
标签: php laravel laravel-4 eloquent