如何在Laravel中动态选择所需的列

如何在Laravel中动态选择所需的列,laravel,eloquent,multilingual,Laravel,Eloquent,Multilingual,嘿,伙计们,我有一个表格,里面有不同语言的内容。像这样: 身份证,姓名,姓名 现在,当我以雄辩的口才请求数据时,我总是这样做: Product::with(['offers', 'category'])->select(['id', getLocalValue('name'))->find($id); 函数getLocalValue使用浏览器语言,选择当前列并将其返回为“name”。因此,当浏览器语言为英语时,我得到的数据如下 {"id" => 1, "name" =>

嘿,伙计们,我有一个表格,里面有不同语言的内容。像这样:

身份证,姓名,姓名

现在,当我以雄辩的口才请求数据时,我总是这样做:

Product::with(['offers', 'category'])->select(['id', getLocalValue('name'))->find($id);
函数getLocalValue使用浏览器语言,选择当前列并将其返回为“name”。因此,当浏览器语言为英语时,我得到的数据如下

{"id" => 1,
 "name" => "Englisch name"
}
我的问题是:我有很多多语言的内容,在很多有关系的表格中。当使用->select()函数时,我必须将所有要请求的列都放在这里。实际上我想做的就是得到一切。但是对于由于多语言而位于不同列中的数据,它应该获取所需的列(如name_en)并返回,而不使用_en(name)


我希望你知道我的意思,并能在这里帮助我:(谢谢你的时间!!!gerti

正如我在上面评论的那样,我将更改数据结构,使语言名称按名称在一个单独的表中。然后,如果你想使用浏览器语言进行检测,你可以使用它直接根据语言设置表

将此添加到您的
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');
}
public function productName () {
    return $this->hasOne('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');
}
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()的话就把它去掉这主要是数据保存方式错误的问题。你现在的做法是,想象你也想在法国销售。你需要更改所有的表>>>这是个坏主意。最好为每种语言创建一个表,然后动态设置表。例如,
de_names
table包含外键
id
名称
,其他语言也一样,然后简单地选择它们。我知道你的意思,谢谢!但是我如何以及何时选择正确的翻译表?我应该在模型中进行并在那里动态生成它吗?你可以设置你想在
产品
模型中使用的表。我希望能给出答案我可以清楚地表达我的意思,如果不想问的话……非常感谢!!:)我理解它是如何工作的。但是,为每一个需要翻译的专栏建立一个模型感觉有点奇怪。我的应用程序将有点大,所以我会有这些模型吨。现在我还是会按照你的方式做:)谢谢!你不需要每一列都有一个模型,如果你现在需要的话,请进一步修改你的数据集以尽可能地简化它。据我所知,我希望翻译的每种语言的每一列都有一个表。还有一个柱模型。就像上面使用productName ModelYes所做的那样,但是所有产品名称表只需要一个型号。它们将通过集合表方法自动解析。只需确保将所有产品命名为前缀“\u productNames”(例如de\u productNames、en\u productNames等)@gerti即可