A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Curso de PHP con Laravel

Curso de PHP con Laravel

H茅ctor Benitez

H茅ctor Benitez

Modelos con Eloquent

10/25
Recursos

Un ORM es un sistema que nos permite mapear registros de la base de datos a objetos dentro 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 46

Preguntas 7

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

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.

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:

  • 鈥榩hp 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:
  • 鈥榩hp artisan make:model 鈥揾elp鈥, 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:
  • 鈥榩hp 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 鈥渕odels鈥 tiene muchas connotaciones.

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

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 鈥渃ommand鈥, 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 鈥渇indAll鈥, lo cual, seria redundante (al menos para mi) en plural, 鈥淢odels.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

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

2022 ya tenemos la carpeta model

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

En laravel 8 o 9 :

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

$report->save();

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

Buena clase Hector

se repite la palabra 鈥渄entro鈥 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 鈥楽QLSTATE[42P01]: Undefined table: 7 ERROR: no existe la relaci贸n 芦expense_reports禄
LINE 1: insert into 鈥渆xpense_reports鈥 (鈥渦pdated_at鈥, 鈥渃reated_at鈥) v鈥
^ (SQL: insert into 鈥渆xpense_reports鈥 (鈥渦pdated_at鈥, 鈥渃reated_at鈥) values (2020-04-07 19:43:55, 2020-04-07 19:43:55) returning 鈥渋d鈥)鈥

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 鈥淓loquent鈥 espero mas adelante podamos comprender bn en q鈥 consiste esto y la forma de usarlo.

El uso de laravel facilita muchisimo las cosas, se trabaja mucho m谩s fresco. Excelente clase

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?