Header Ads Widget

Ticker

6/recent/ticker-posts

Tutorial de ORM elocuente de Laravel

 Tutorial de Laravel-Eloquent-ORM


Eloquent es el ORM u Object Relational Mapper muy poderoso y expresivo de Laravel. Si sabe cómo trabajar con objetos en PHP, ¡entonces sabe cómo usar Eloquent! Bueno, no es * tan * tan simple, pero tenemos la sintaxis más expresiva hasta ahora en PHP para trabajar con modelos a través de Eloquent. También puede disfrutar de nuestro tutorial Cómo empezar con Eloquent .


nota: en Laravel, los conjuntos que se devuelven como resultado de una consulta elocuente devuelven una colección. Puede aprender todo sobre las colecciones de Laravel en nuestro extenso tutorial.

Tabla de base de datos para mapeo de modelos elocuentes

En Laravel, cada modelo de Eloquent representa una sola tabla de base de datos. Sin embargo, es importante tener en cuenta que, aunque un solo modelo se asigna a una sola tabla, la mayoría de las veces utilizaremos combinaciones de modelos para recuperar, por ejemplo, un artículo, una tarea o una publicación de blog. A modo de relaciones, podemos consultar varias tablas para obtener el resultado deseado.


De la clase DB a Eloquent

En el último tutorial, cubrimos cómo hacer CRUD básico con Laravel usando la clase DB desde el primer momento. Ahora recuerde, ni siquiera creamos ningún modelo para eso, la funcionalidad estaba ahí desde el primer momento. ¡Muy impresionante! Continuando, ahora podemos definir algunos modelos y esto será extendiendo Eloquent.


¡Construyamos nuestro primer modelo Eloquent!

Vamos a tratar con pintores y pinturas, así que primero crearemos nuestro modelo de pintor, pero antes de crear nuestros modelos, configuremos nuestras tablas de base de datos con migraciones como se ve aquí:

Ejecutemos nuestras migraciones usando php artisan migrate.

¡Increíble! Ahora podemos crear un modelo y completar algunos datos en nuestra base de datos. El siguiente fragmento creará un modelo de pintor que se asignará a la painterstabla de la base de datos:

Ok, hemos creado nuestro modelo Eloquent, sí, sé que fue doloroso lo mucho que tuvimos que escribir. ¡Veamos qué nos compra esa pequeña línea de código al usar la reflexión para inspeccionar nuestro objeto recién creado!

El código anterior generará los 164 métodos que encuentra en Laravel Eloquent API : ¡esto es un poco abrumador! Pero como dicen, ¡CÁMATE SALTAMONTES! Solo veremos algunos de ellos para comenzar. Dado que ya cubrimos cómo configurar CRUD en Laravel 4 con la clase DB, ¿por qué no preparamos CRUD con Eloquent? Como estamos aprendiendo usaremos:

¡Esto nos permitirá ver todas las consultas que Laravel crea para nosotros! Esto nos ayuda a ponerlo todo junto.


Crear

save()Podemos insertar nuevos registros en la base de datos de varias formas en Eloquent, pero mi sintaxis favorita está aquí usando el savemétodo:

'inserto en cadena paintersusernamebioupdated_atcreated_at) valores (?,?,?,?)' (longitud = 90)

Recuperar (Seleccionar)

all()first()echemos un vistazo a nuestro registro recién creado seleccionando datos ahora:

cadena 'seleccionar * de painters' (longitud = 24)

Leonardo Da Vinci
, pintor, científico, inventor y más del Renacimiento. Da Vinci es uno de los pintores más famosos por su icónica Mona Lisa y La última cena.


Actualizar

Pasemos a una actualización. Creo que agregaremos un guión en el apellido. Tenga en cuenta que no existe un método de actualización específico per se, sino que lo recuperamos, cambiamos un atributo y usamos el método de guardar así:

cadena 'seleccionar * de painters' (longitud = 24)
cadena ' paintersconjunto de actualización username=?, updated_at=? donde id=? ' (longitud = 69)

Eliminar

deleteCon elocuente, eliminar un registro es muy fácil. Echar un vistazo:

cadena 'seleccionar * de painters' (longitud = 24)
cadena 'eliminar de paintersdonde id=?' (longitud = 37)

y así, ¡POOF! , Leonardo ya no está con nosotros en la base de datos.


Relaciones en Eloquent

Las relaciones son un componente clave en Eloquent, pero primero, ¡necesitamos más pintores! Vamos a agregarlos:

cadena 'de inserción en paintersusernamebioupdated_atcreated_at) valores (?,?,?,?)' (longitud = 90)
cadena 'de inserción en paintersusernamebioupdated_atcreated_at) valores (?,?,?,?)' (longitud = 90)
'inserto en cadena paintersusernamebioupdated_atcreated_at) valores (?,?,?,?)' (longitud = 90)

¡Excelente! Ahora, sabemos que los pintores probablemente habrán creado algunas pinturas. Para abreviar, mostraré solo un fragmento de cómo podemos insertar una Pintura. Solo tenga en cuenta que para nuestros propósitos Leonardo Da Vinci es painter_id 2, Vincent Van Gogh es id painter_id 3 y Rembrandt es id painter_id 4. Es por este mismo campo, painter_id, que está en la tabla de pinturas, que facilita nuestras relaciones. ¡Tendremos que recordar esto al construir métodos para seleccionar datos de nuestra base de datos usando relaciones!

Inserto de pintura de muestra:

nota: Ejecutamos variaciones en el código anterior unas cuantas veces para darle a cada pintor al menos 2 pinturas en la base de datos.


tiene muchos

Un pintor suele tener muchas pinturas, al igual que un autor puede tener muchos libros, o una gallina puede tener muchos huevos. En Laravel, podemos definir relaciones como esta en nuestro Modelo así:

¡Aquí hay un gran truco para ayudarte a recordar cómo funciona esto! Comience con la $thispalabra clave, seguida del nombre de la clase del archivo, seguido del método $ this , seguido del Modelo pasado. Así que en este caso se leería así: Este pintor tiene mucha pintura. ¿Ves cómo funciona?


pertenece a

Lo contrario de esto es que todas las pinturas deben haber sido pintadas por un pintor. También podríamos decir que un cuadro pertenece a un pintor. ¡Veamos este modelo!

¡Podemos usar el mismo truco aquí! (este | nombre del archivo de clase | nombre del método | nombre del modelo pasado) Entonces, en este caso, tendríamos Esta pintura pertenece al pintor .

Buen trabajo 🙂

Métodos dinámicos, ¡Dios mío!

Ahora que hemos configurado nuestros modelos para representar tanto las relaciones hasMany como pertenecen a , podemos empezar a consultar la base de datos de formas muy inteligentes. Por ejemplo, utilizando métodos dinámicos y las relaciones que acabamos de crear, podemos decirle a la base de datos que vaya a buscar las pinturas de Leonardo Da Vinci y nos las devuelva . Vamos a verlo:

cadena 'seleccionar * desde paintersdonde username=? límite 1 ′ (longitud = 53)
cadena 'seleccionar * desde paintingsdonde paintingspainter_id=? ' (longitud = 60)

Mona Lisa
La Mona Lisa es un retrato de medio cuerpo de una mujer del artista italiano Leonardo da Vinci, que ha sido aclamado como “el más conocido, el más visitado, el más escrito, el más cantado, la obra más parodiada del arte en el mundo

Última Cena
La Última Cena es una pintura mural de finales del siglo XV de Leonardo da Vinci en el refectorio del Convento de Santa Maria delle Grazie, Milán. Se presume que la obra se inició alrededor de 1495 y fue encargada como parte de un plan de renovación de la iglesia y sus edificios conventuales por el patrón de Leonardos, Ludovico Sforza, duque de Milán.

Observe el método whereUsername , ¡no lo había visto antes! No, no es amigo, eso es porque con Laravel puedes combinar una cláusula where con el nombre de la tabla y pasar la cadena que estás buscando. ¡Alucinante! Ahí está tu método dinámico. Ahora en lo que respecta a la relación, ésta funciona ya que en nuestro modelo de Pintor, le dijimos que ¡ Este Pintor tiene Mucha Pintura !

Hagamos ahora lo inverso, preguntaremos a la base de datos algo como "¿Quién pintó a los comedores de patatas?" Con nuestra relación establecida en el modelo de Pintura tal que esta pintura pertenece al pintor , también deberíamos poder hacer esto a la inversa:

cadena 'seleccionar * desde paintingsdonde title=? límite 1 ′ (longitud = 51)
cadena 'seleccionar * desde paintersdonde id=? límite 1 ′ (longitud = 47)
Vincent Van Gogh

¡Por supuesto! Vincent Van Gogh es el pintor que pintó 'Los comedores de patatas'. El código anterior fue la forma más larga de hacer esto. Verá, cuando creamos ambas relaciones, ¡podemos combinar los modelos para llegar a cualquier campo en cualquiera de las tablas pasando por él! Dado que creamos una instancia del Paintingmodelo en $painting, ahora podemos pasar por el Paintermodelo para llegar a cualquier campo en esa tabla. ¿Cómo? Me gusta esto:

cadena 'seleccionar * desde paintingsdonde title=? límite 1 ′ (longitud = 51)
cadena 'seleccionar * desde paintersdonde paintersid=? límite 1 ′ (longitud = 58)
Vincent Van Gogh
Pintor postimpresionista holandés. Las pinturas famosas incluyen: Girasoles, La noche estrellada, Terraza de café por la noche.

Observe que el único modelo del que se ha creado una instancia es el modelo de pintura; sin embargo, estamos accediendo a los campos de la tabla de pintores con facilidad, ya que lo estamos revisando.

Use su imaginación y básicamente puede pedirle a la base de datos lo que quiera, solo se necesita un poco de prueba y error. ¡Vamos a decirle a la base de datos que “ Consígame todos los cuadros que tiene y dígame quién pintó cada uno ”! ¡Ojo, ojo, capitán!

cadena 'seleccionar * desde paintings' (longitud = 25)
cadena 'seleccionar * desde paintersdonde paintersid=? límite 1 ′ (longitud = 58)
Leonardo Da Vinci pintó la
cadena Mona Lisa 'seleccionar * desde paintersdónde paintersid=? límite 1 ′ (longitud = 58)
Leonardo Da Vinci pintó la
cuerda de la Última Cena 'seleccionar * desde paintersdónde paintersid=? límite 1 ′ (longitud = 58)
Vincent Van Gogh pintó la
cadena La noche estrellada 'seleccionar * desde paintersdónde paintersid=? límite 1 ′ (longitud = 58)
Vincent Van Gogh pintó la
cadena The Potato Eaters 'seleccionar * desde paintersdónde paintersid=? límite 1 ′ (longitud = 58)
Rembrandt pintó la
cadena The Night Watch 'seleccionar * desde paintersdónde paintersid=? límite 1 ′ (longitud = 58)
Rembrandt pintó La tormenta en el mar de Galilea

Observe con cuántas consultas está llegando a nuestra base de datos. Probablemente esto no sea lo ideal. Una mejor manera de hacer esto sería usar la carga ansiosa por medio del withmétodo:

cadena 'seleccionar * desde paintings' (longitud = 25)
cadena 'seleccionar * desde paintersdonde paintersiden (?,?,?) '(longitud = 59)

Leonardo Da Vinci pintó la Mona Lisa
Leonardo Da Vinci pintó la Última Cena
Vincent Van Gogh pintó La noche estrellada
Vincent Van Gogh pintó Los devoradores de patatas
Rembrandt pintó La ronda de noche
Rembrandt pintó La tormenta en el mar de Galilea

Ahora eso es más como eso, jefe. 2 consultas, ¡y listo!

Bueno, eso es suficiente para este. Hay muchas más cosas que aprender en Laravel, ¡pero espero que esto ayude de alguna manera!

Publicar un comentario

0 Comentarios