No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

13 Días
2 Hrs
47 Min
3 Seg

Modelos con Eloquent

10/25
Recursos

Un ORM es un sistema que nos permite mapear registros de la base de datos a objetos dentro de nuestro código. No es exclusivo de PHP ya que se usa mucho en los lenguajes de programación orientada a objetos.

  • make:model crea una nueva clase para representar un modelo de Eloquent.
  • Cuando creamos las bases de datos es estándar que las tablas tengan el nombre en plural, pero los modelos, como representan una clase que representa un objeto, tendrán su nombre en singular.
  • Todos los modelos los podremos encontrar dentro de la carpeta app. Laravel no tiene carpeta models porque los creadores creen que model puede tener muchos significados.
  • El comando tinker nos ofrece un entorno de pruebas para ver cómo funcionan las cosas que estamos haciendo. Tiene en cuenta variables de entorno, lo que inicializa Laravel y también sabe que estamos usando Eloquent.

Aportes 49

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

vengo del futuro, en mi año ya existe la carpeta model(minuto 2:50), saludos

Bueno me toco ver el vídeo como tres veces para poder comprender mejor para q sirve todo este tema de las migraciones y Thinker.

depende de la version viene una carpeta llamada Models
comando tinker
App\Models\ExpenseReport::all()

En la version 8 ya tenemos la carpeta Models.

Apuntes:

Eloquent es el ORM (Objet Relational Model) de Laravel, el cual nos va a permitir trabajar con los modelos del paradigma. Para crear un modelo en Laravel, nos vamos al CMD y escribimos:

  • ‘php artisan make:model [nombreDelModelo]’, por lo cual se va a crear un archivo con los el modelo y su respectivo nombre creados.
    En caso de que tengamos dudas con respecto al comando, podemos escribir:
  • ‘php artisan make:model –help’, El cual nos va a mostrar la descripción y la estructura del comando como tal.
    Laravel nos ofrece Tinker, la cual es una herramienta que nos permite emular las clases que creamos con eloquent. Para desplegarlo, escribimos lo siguiente:
  • ‘php artisan tinker’
    Notas:
  • Las tablas en la base de datos tienen un nombre el plural, mientras que al momento de crear una clase (la cual representa un objeto), lleva su nombre en singular.
  • El directorio donde se guardan los modelos es en la carpeta /app, puesto que asi lo decidieron los creadores del framework, ya que el nombre “models” tiene muchas connotaciones.

Un comentario al video, no es convencion, ni ningun estandar, que los nombres en DB sean en singular o plural, hay mucha controversia sobre el tema, sin embargo no hay nada que diga que debas hacerlo de una u otra forma, a menos que sea una convencion unica de PHP.

Por otra parte, a mi NO me gusta el nombre en plural de las tablas, porque, a pesar de que una tabla tecnicamente almacena multiples records o rows, se supone que el nombre de la tabla representa una entidad en la tabla, es decir una persona, una orden, etc…

Miralo de esta forma, cuando retornas un row de una tabla llamda “command”, cuando haces referencia a los campos seria algo asi…

SELECT command.name, command.code FROM command WHERE id = 12;

En caso contrario seria algo como…

SELECT commands.name, commands.code FROM commands WHERE id = 12;

Una ventaja es que de esta forma el modelo y la tabla, mantienen el mismo nombre, otro punto a favor, es que los metodos de los ORM (Sequelize, Hibernate, Django, etc), no se llaman, Models.find() (siendo Models un modelo cualquiera en plural) el cual te trae muchos records de DB, al contrario, tienen un nombre como “findAll”, lo cual, seria redundante (al menos para mi) en plural, “Models.findAll()”.

Lo que quiero dejar en claro con esto, es que no hay una forma correcta de hacerlo, cada una tiene sus ventajas y desventajas con respecto a sintaxis.

https://dba.stackexchange.com/questions/13730/plural-vs-singular-table-name

como sabe Eloquent que la tabla que le corresponde al modelo ExpenseReport es expense_reports ?

2021 ya existe la carpeta models

En laravel 8 o 9 :

$report = new App\Models\ExpenseReport();

$report->save();

$report = new App\Models\ExpenseReport();

2022 ya tenemos la carpeta model

Les recomiendo una lectura rapida sobre como funciona Eloquent

Eloquent

Quedo muy satisfecho con esta clase, no conocía del uso de Tinker

Sí me aparece la carpeta: Models, dentro del folder: app

Cuando creamos las bases de datos es estándar que las tablas tengan el nombre en PLURAL pero los modelos como representan una clase que representa un objeto, tendrán su nombre en SINGULAR.

Este video explica muy bien los temas que abarca, recomiendo tener cuidado al usar models con sus respectivas tablas, recuerden que la tabla lleva una s al final y el model no

Notas:

  • Comando Make:model permite crear modelos eloquent

  • Es recomendable crear las tablas de las bases de datos en plural ya que almacenaran varios objetos y los modelos en singular puesto que se hace referencia al modelo de un objeto

  • Comando tinker nos permite crear una especie de sandbox para evaluar el comportamiento de las clases.

Sin duda uno de los mejores cursos de Platzi.

Estoy intentando usar Tinker pero las teclas de flecha no me funcionan. Estoy usando un Mac.
¿A alguien le ha ocurrido lo mismo?
muchas gracias

namespace App\Models; actualmente 2024

App\Models\expenseReport::all();

La Carpeta Models ya existe…
Me daba error…

A mí me creo cursolaravel.table_expense_reports en vez de cursolaravel.expense_reports

Buena clase Hector

se repite la palabra “dentro” en la primera y segunda linea de la descripción.

Muy buena la clase hasta ahora me ha gustado mucho el curso e Laravel, muy interesante este FrameWork…

Mi función quedo así:

public function index()
    {
        //return ExpenseReport::all();
        return view('ExpenseReport.index', [
            'ExpenseReports' => ExpenseReport::all(),
            'title' => 'Expense Report'
        ]);
    }    	

El titulo igualmente lo envíe dinamicamente por si cambia en el futuro,

En el view lo llamo {{ $title }}

Excelente la herramienta TInker

tinker nos ofrece una especie de entorno de pruebas como sandbox donde podemos ver como esta funcionando el código y las cosas que vamos haciendo.

Muy buena esta herramienta se ve muy util!!

Illuminate/Database/QueryException with message ‘SQLSTATE[42P01]: Undefined table: 7 ERROR: no existe la relación «expense_reports»
LINE 1: insert into “expense_reports” (“updated_at”, “created_at”) v…
^ (SQL: insert into “expense_reports” (“updated_at”, “created_at”) values (2020-04-07 19:43:55, 2020-04-07 19:43:55) returning “id”)’

Muy buena clase, muchas gracias 😄

Funciono perfectamente ❤️

Pregunta!!
Como sabe laravel que mi clase ExpenseReport esta asociada a mi migración create_table_expense_report ya que no vi ningún tipo de configuración, mas que en la similitud del nombre

Tinker es una consola de comandos con la que podremos interactuar con todas las clases y métodos de nuestra aplicación, una herramienta muy útil a la hora de realizar pruebas de funcionamiento.

Se que suena como si fuese una forma tan sencilla de tener una BD relacionales, pero soy de la vieja escuela en donde tu crear las tablas, los campos e insertar registros mediante un Query, porque tinker hace todo internamente y solo pones los datos a llenar, y por que hacer un migrate luego modelo, me confunde.

En menos de un días se puede conocer las bases de Laravel y hacer un ejemplo funcional, una clase muy bien sintetizada para personas que conocen algo de Php y tiene bases de Prog Orientada a Objetos

Si sigo la recomendación que sugiere Laravel sobre almacenar los modelos directamente en la carpeta app así como se menciona en el minuto 2:45 ¿Habrá problemas de desorden cuando la cantidad de modelos que se tenga sea muy grande o existe alguna otra recomendación en esos casos?

En caso de que les aparezca el siguiente error al momento de realizar la migración:

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL (SQL: alter table "expense_reports" add column "title" text not null)

Se puede solucionar permitiendo que la columna title tenga valores nulos:

public function up() { Schema::table('expense_reports', function (Blueprint $table) { $table->text('title')->nullable(); }); }

ExpenseReport::all() viene siendo lo q’ podríamos llamarle el modelo???

Huy la verdad primera clase q’ quedo un poco Azul, no entendí muy bn q’ se hace con esta opción “Eloquent” espero mas adelante podamos comprender bn en q’ consiste esto y la forma de usarlo.

se hace todo mas sencillo usando laravel que php puro, pero se siente como si se le quitara trabajo al desrrollador !

Para los que estéis usando tinker y al ejecutar alguna instrucción se os salga de la consola de tinker, tenéis que crear un archivo config.php en el directorio
~/.config/psysh/config.php

con el siguiente contenido:

<?php
return [
  'usePcntl' => false,
];

Esto os pasará si estáis usando la versión de PHP 7.3 en MacOs Mojave, e instalasteis usando brew.

En mi caso siguiendo los pasos no creo la tabla en la base de datos, entonces obte por el comando php artisan migrate, entonces si la creo y se logro hacer los reportes

tinker sirve para ejecutar cualquier cosa de php ahi aveces sirve para probar algunas cosas sin tener que andar haciendo clases

A partir de la versión 8, Laravel ya incluye la carpeta App\Models.

Efectivamente siempre es bueno manejar el código en inglés (Además que se ve más elegante xD) Pero igual por buenas prácticas.

Como dato curioso, en Laravel 8 los modelos ya están de vuelta en la carpeta Models… cosas de Laravel

que bueno es conocer mas herramientas manejaba Laravel pero no conocía de Tinker

cuidado con el comando en tinker y su sensibilidad a las mayusculas.
App\expenseReport::all()
v v v v v v v v v v v v v v
App\ExpenseReport::all()

Como es que Laravel sabe a que Tabla hacemos referencia creando un model de eloquent?