En Laravel muchas veces necesitamos generar en nuestros modelos de Eloquent campos personalizados como por ejemplo el caso del nombre completo de un usuario del sistema, en este caso, podemos requerir tener dentro de la tabla users dos columnas name y lastname, siendo en español, nombre y apellido, comunmente dentro del sistema en este caso necesitaremos mostrar el nombre completo de el usuario y para ello tendriamos que anidar 2 campos correspondientes a estas dos columnas, vamos a simplificar el proceso, creando un atributo personalizado dentro de nuestro modelo.

Crearemos un campo llamado fullname en donde concatenaremos ambos campos name y lastname (nombre y apellido) con tal que si necesitamos mostrar en el sistema el nombre completo de el usuario simplemente utilizaríamos fullname en vez de estar concatenando en la vista, éste campo personalizado lo crearemos utilizando Getters Attribute dejando en nuestro modelo User la siguiente función:

public function getFullNameAttribute()
{
    return $this->name().’ ‘.$this->lastname;
}

De esta manera podremos acceder a el atributo full_name de la siguiente manera, primero obtenemos un usuario en este ejemplo el primer registro

$user = User::first();

Posteriormente si queremos acceder a nuestro atributo personalizado debemos llamarlo

$user->full_name;

Con esto todo bien, el problema radica en la situación donde por ejemplo queremos en una api retornar directamente con json la colección contenida en $user

return response()->json($user);

En este caso la colección NO contendrá el atributo personalizado full_name por defecto, para indicarle al modelo que además retorne nuestro(s) atributos personalizados debemos utilizar el array $appends en nuestro modelo de la siguiente manera:

protected $appends = [‘full_name’];

Ahora si el modelo retornará junto a nuestros otros atributos nuestro atributo personalizado full_name 😀