Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Formato de valores en tablas y presentación de datos

15/36
Recursos

Aportes 21

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Es importante seguir la convención de nombrado que usa Laravel para que ciertos métodos funcionen “por debajo” sin necesidad de código adicional, además que siempre es bueno seguir estándares y buenas prácticas para que el código sea más entendible.

Un ejemplo de esto es la forma en que relaciona los modelos con las tablas de manera implícita, Laravel convierte el nombre del modelo que está escrito por lo general en PascalCase, lo convierte en snake_case en plural y esa sería la tabla asociadada en BD (User->users, TypeUser->type_users). Aunque también se puede cambiar de forma explícita diciéndole al modelo:

protected $table = 'users';

Esto mismo funciona con los getters y setters, al tratar de acceder a una propiedad de un modelo que no existe en base de datos, el cual está escrito en snake_case, Laravel lo convierte en PascalCase y busca una función de la forma get{Atributo}Attribute(), de igual forma con los setters al momento de guardar campos en la base de datos.

Hay muchas convenciones de nombrado estándar en Laravel, tanto para el nombre de los controladores, modelos, vistas, rutas, pruebas, etc. Recomiendo este enlace para más información al respecto:
https://kennyhorna.com/blog/0020-laravel-convenciones-de-nombrado-nombres/

Formato de valores en tablas y presentación de datos


Vamos a encargarnos en esta clase de cómo imprimir y guardar los datos en la DB.

Para imprimir y modificar el formato en que vienen los datos iremos al modelo y buscaremos el archivo de nuestra tabla. Aquí dentro de la clase crearemos un método.

💢💥 Tenemos que asegurarnos que el método para imprimir comience por get y termine por Attribute, de la siguiente forma:

public function getGetTitleAttribute()
    {
        return strtoupper($this->title);
    }

Y en la vista para invocar el método lo haremos así:

Route::get('posts', function () {
    $posts = Post::get();

    foreach ($posts as $post) {
        echo "<p>
        $post->id:
        <b>{$post->user->name},</b>"
        // con get_ seguido del nombre del campo
        . "$post->get_title</p> <br>";
    }
});

Si queremos hacer lo contrario para cuando la Database reciba los datos y los modifique antes de meterlos, hacemos lo siguiente:

public function setNameAttribute($value)
    {
        $this->attributes['name'] = strtolower($value);
    }

En la documentación de laravel esta parte se encuentra como Accessors and mutators.
https://laravel.com/docs/7.x/eloquent-mutators#introduction

En esta clase se toco el tema de Mutators y Castings.
as informacion aqui

https://laravel.com/docs/8.x/eloquent-mutators

senti que esto de las mayusculas fue mas largo y tedioso que hacerlo en el controlador para cuando guarda un CRUD

Hasta aquí, el mejor curso de Laravel que he tomado.

Estoy usando Laravel Framework 8.77.1

En el modelo se escribe de esta forma:

public function getNameAttribute($name)
{
return strtoupper($name);
}

En el archivo de ruta no hice ningún cambio y al visualizar se mostró en mayúscula.

En Laravel 8.x esto se puede hacer:

public function getNameAttribute($name){
        return \strtoupper($name);
    }

Este es uno de los temas que me encanta de Laravel porque realmente no importa cómo te lleguen los datos, tu puedes siempre manipularlos para que esten en el formato que quieres, es muy útil

Mi aporte para comprender mejor:

  • Relaciones entre modelos

  • GET method: lee la base de datos y transforma el atributo al renderizar.

  • SET method: lee el form enviado y lo modifica para guardar en la base de datos.

class MyModel extends Model
{
    use HasFactory;

    // One to one relationship
    // Se relaciona uno a uno con el otro modelo
    public function other_model()
    {
        return $this->belongsTo(OtherModel::class);
    }

    // GET  METHOD para presentar datos y modificarlos al renderizar
    // Funciona cuando renderizamos los datos...
    // $instance->get_<attribute_name> en el controlador
    //
    // getGet<Attribute>Attribute()
    public function getGetNameAttribute()
    {
        return ucfirst($this->name);
    }

    // SET METHOD almacena datos en db
    // Funciona cuando grabemos la instancia en db
    //
    // set<Attribute>Attribute($value)
    public function setNameAttribute($value)
    {
        $this->attributes['name'] = strtolower($value);
    }
}

Excelente la convención de estos nombre en los métodos para que sean usados genial,
todo en la documentacion de Laravel data mutators

Este problema no se les habia presentado:
Using an accessor or mutator if the column has 2 consecutive underscores

A mi si me presentó por que los campos de la tabla tenian underscore “guion al piso”; aqui dejo el link:

https://stackoverflow.com/questions/62678696/using-an-accessor-or-mutator-if-the-column-has-2-consecutive-underscores

En la Ruta backend PHP le faltó decir una extension de visual studio code :intelephense , ayuda un monton.

Hola platzi y estudiantes, tengo un problema para poder conectarme con postgres, me sale el siguiente error.
could not find driver (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations)
Con MySQL me sale toda la migracion, ya se activaron las extencion en php.ini y modifique el .env, pero nada. Agradezco su ayuda.

Exactamente en este capitulo el profe no lo menciona, pero al menos lean lo que son accessors y mutators. Les va a servir para que tengan claro que es la forma tecnica de nombrar al formato y presentacion de datos y valores.

https://laravel.com/docs/6.x/eloquent-mutators

Muy buena clase.

Muy interesante

Laravel permite crear diferentes métodos para manipular la forma en que se presentan o almacenan los datos.

RESUMEN

A)
vamos al model de Post
"app/Post.php

    public function getGetTitleAttribute(){
        return strtoupper($this->title);
    }

B)
"routes/web.php
Route::get('/posts', function () {
    $posts = Post::get();

    foreach($posts as $post){
        echo "
        $post->id 
        <strong>{$post->user->get_name}</strong>  
        $post->get_title //cambiamos title por get_title
        <br/>";
    }
});

YA NOS IMPRIME TODOS LOS TITULOS DE LOS POSTS EN MAYUSCULAS!!!

--------------------------------------------------------------------------------------------------------
"app/Post.php
	//cuando se este guardando el nombre lo convertimos en minuscula
    public function setTitleAttribute($value){
       $this->attributes["title"]= strtolower($value);
    }

B) php artisan migrate:refresh --seed // para repoblar la db

NOS FIJAMOS EN LA DB Y TODOS LOS DATOS NUEVOS QUE SE GUARDARON ESTAN TOTALMENTE EN MINUSCULA
__________________________________________________________________________
"Post.php
    public function getGetTitleAttribute(){
        return ucfirst($this->title);
    }


//Y LISTO YA NO IMPORTA COMO LOS USUARIOS METAN LOS DATOS SIEMPRE SE GUARDAN EN MINUSCULA
//SIEMPRE SE IMPRIMEN CON LA 1ERA LETRA EN MAYUSCULA

Gracias

Me estaba preguntando como sabe laravel que get_name hace referencia al método o “Mutator”, bueno fui a la documentación de laravel acerca de los mutators y encontré ésto:
“To define a mutator, define a setFooAttribute method on your model where Foo is the “studly” cased name of the column you wish to access. So, again, let’s define a mutator for the first_name attribute. This mutator will be automatically called when we attempt to set the value of the first_name attribute on the model:”