Laravel изменить имя атрибута коллекции - PullRequest
0 голосов
/ 25 ноября 2018

Как бы вы изменили атрибуты из коллекции?
Таким образом, возвращаемое значение представляет собой коллекцию моделей с измененными атрибутами, а не коллекцию массивов.

Дело в том, что я хотел бы сделатьЭто своего рода переводчик, поэтому, когда я получаю коллекцию, я могу использовать 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"
]

Dinamicaly byиспользуя ассоциативный массив

1 Ответ

0 голосов
/ 25 ноября 2018

Решение:

В вашей модели добавьте следующий код.

  protected $appends = ['nome'];

  public function getNomeAttribute(){

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

 }

Вы можете получить к нему доступ, запросив $ modelObj-> nome;

Сделайте то же самое для всехнеобходимые атрибуты.

Это также будет отражено в вашем ответе JSON.

Спасибо

Ссылка: https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor

...