嗨,伙计们,我有一张包含不同语言内容的表格。像这样:
id,name_en,name_de
现在,当我用Eloquent请求数据时,我总是这样做:
Product::with(['offers', 'category'])->select(['id', getLocalValue('name'))->find($id);
函数getLocalValue采用浏览器语言,选择当前列并将其返回为" name"。因此,当浏览器语言是英语时,我会得到像
这样的数据{"id" => 1,
"name" => "Englisch name"
}
我的问题:我在许多关系表中都有很多多语言内容。当使用 - > select()函数时,我必须将所有列放在此处,我想要请求。实际上,我想做的就是获得一切。但是对于因多语言而在不同列中的数据,它应该采用所需的列(如name_en)并在没有_en(名称)的情况下将其返回。
我希望你知道我的意思,可以帮助我:(感谢您的时间!!! gerti
答案 0 :(得分:1)
正如我在上面评论的那样,我将更改数据结构,使其按名称在单独的表中使用语言名称。然后,如果要使用浏览器语言进行检测,可以使用它直接根据语言设置表。
将此添加到您的productName
模型:
protected static $_table;
public function setTable($prefix)
{
static::$_table = $prefix.'_productNames';
return $this;
}
public function getTable()
{
return static::$_table;
}
public function Product () {
return $this->belongsTo('Product');
}
并将其添加到您的Product
模型:
public function productName () {
return $this->hasOne('productName');
}
现在您可以通过以下方式设置要使用的表:
$productName = new productName;
$productName->setTable(strtolower(getLocalValue('name')));
根据这个,您的表必须命名为
de_productNames
只是举个例子。
现在您可以使用以下查询:
$productName = new productName;
$productName->setTable(strtolower(getLocalValue('name')));
Product::with(['offers', 'category','productName'])->find($id);
我不确定你的getLocalValue()
是做什么的,strtolower只是为了适应表名,如果getLocalValue()已经为你做了这个就去掉它。