Laravel:如何别名列名

时间:2018-06-13 20:49:55

标签: php laravel eloquent

想象一下,存在一个具有以下属性的User模型实例:

User {
  id: 1,
  name: 'Alexandre Thebaldi',
  email: 'alexandre@email.com'
}

在视图中,我想使用@foreach语句自动打印每个列别名+值,例如:

<ul>
    @foreach($user as $attribute)
        <li>{{ $attribute->column_alias }}: {{ $attribute->value }}</li>
    @endforeach
</ul>

将像Validator属性别名一样工作。输出结果应为:

  • 身份证明:1
  • 姓名:Alexandre Thebaldi
  • 电子邮件地址:alexandre@email.com

有一些方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:3)

您可以调用$someModel->toArray()(或->getAttributes(),这将隐藏密码等敏感数据)以获取基础数据阵列。这样,您可以打印列名称及其值:

<ul>
    @foreach($user->toArray() as $key => $attribute)
        <li>{{ $key }}: {{ $attribute }}</li>
    @endforeach
</ul>

但你的钥匙会说,例如&#34; id&#34;,&#34; name&#34;等等,而不是更长的单词。我建议把它放在翻译文件中。仅作为一个例子:

<ul>
    @foreach($user->toArray() as $key => $attribute)
        <li>{{ __('user-model-keys.'.$key) }}: {{ $attribute }}</li>
    @endforeach
</ul>

resources/lang包含您希望应用程序所使用的每种语言的文件夹。其中的每个文件都包含您的翻译作为返回的数组。所以如果你想翻译&#34; id&#34; as&#34; Identification&#34;,并且您的语言是英语,然后根据上面的代码创建一个文件resources/lang/en/user-model-keys.php并将其放入:

<?php
return [
    'id' => 'Identification'
];

现在,__('user-model-keys.id')将翻译&#34; id&#34;到&#34;识别&#34;。

您可以在此处详细了解本地化:https://laravel.com/docs/5.6/localization

答案 1 :(得分:2)

试试这个。

在您的模型中添加此

/**
 * @var array
 */
protected $alias = [
    'name' => 'user name',
    'email' => 'User email',
    'other property' => ' property alias'
];

/**
 * @param $attribute
 * @return string
 */
public function getAttributeAlias($attribute) {
    return $this->alias[$attribute] ?: '';
}

然后你可以使用

<ul>
    @foreach($user->getAttributes() as $attribute => $value)
        <li>{{ $user->getAttributeAlias($attribute) }}: {{ $value }}</li>
    @endforeach
</ul>

为了使其脱离模型,您可以添加像alias.config

这样的配置文件

return [
    'user' => [
        'name' => 'User name',
        'email' => 'User Email',
        'other property' => 'property alias'
    ],
    'other model' => [
         'other property' => 'property alias'
    ]
];

用法

<li>{{ config('alias.user.' . $attribute, '')) }}: {{ $value }}