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 鈥減or 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 鈥済uion 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 鈥淢utator鈥, bueno fui a la documentaci贸n de laravel acerca de los mutators y encontr茅 茅sto:
鈥淭o define a mutator, define a setFooAttribute method on your model where Foo is the 鈥渟tudly鈥 cased name of the column you wish to access. So, again, let鈥檚 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:鈥