Laravel变更集合属性名称

时间:2018-11-25 12:24:08

标签: laravel laravel-5.7 laravel-collection

如何更改集合中的属性?
因此,返回的是属性已更改的模型集合,而不是数组的集合。

问题是,我想做某种翻译演示者,所以当我得到集合时,我可以用dd($ collection)代替“ name”显示“ nome”,也可以使用response()- > json($ collection)将显示更改后的名称。

所以类似$ presenterNames = ['name'=>'nome','id'=>'identificador'];而且这里没有的名字会正常调用。

Collection {#213 ▼
    #items: array:2 [▼
        0 => Category {#215 ▼
            +timestamps: false
            #fillable: array:2 [▶]
            #connection: "mysql"
            #table: "categories"
            #primaryKey: "id"
            #keyType: "int"
            +incrementing: true
            #with: []
            #withCount: []
            #perPage: 15
            +exists: true
            +wasRecentlyCreated: false
            #attributes: array:3 [▼
            "id" => 1
            "name" => "categoria1"
            "slug" => "categoria1"
            ]
            #original: array:3 [▶]
            #changes: []
            #casts: []
            #dates: []
            #dateFormat: null
            #appends: []
            #dispatchesEvents: []
            #observables: []
            #relations: []
            #touches: []
            #hidden: []
            #visible: []
            #guarded: array:1 [▶]
            #slugOptions: null
        }
        1 => Category {#219 ▶}
    ]
}

所以基本上我想改变

#attributes: array:3 [▼
    "id" => 1
    "name" => "categoria1"
    "slug" => "categoria1"
]

对此

#attributes: array:3 [▼
    "identificador" => 1
    "nome" => "categoria1"
    "slug" => "categoria1"
]

通过使用assoc数组进行分类。

1 个答案:

答案 0 :(得分:1)

解决方案:

在模型中添加以下代码。

  protected $appends = ['nome'];

  public function getNomeAttribute(){

    return $this->attributes['name'];

 }

您可以通过查询$ modelObj-> nome来访问它;

对所有必需的属性执行相同的操作。

这也将反映在您的JSON响应中。

谢谢

参考:https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor