ORM
La asignación relacional de objetos (ORM) es una técnica de programación en la que se utiliza un descriptor de metadatos para conectar el código objeto a una base de datos relacional. El código de objeto está escrito en lenguajes de programación orientada a objetos (OOP) como Java o C #. ORM convierte los datos entre sistemas de tipos que no pueden coexistir dentro de bases de datos relacionales y lenguajes OOP.
ORM resuelve el código objeto y la base de datos relacional no coincidentes con tres enfoques: de abajo hacia arriba, de arriba hacia abajo y se encuentran en el medio. Cada enfoque tiene su parte de beneficios y desventajas. Al seleccionar la mejor solución de software, los desarrolladores deben comprender completamente el entorno y los requisitos de diseño.
Además de la técnica de acceso a datos, los beneficios de ORM también incluyen:
- Desarrollo simplificado porque automatiza la conversión de objeto a tabla y de tabla a objeto, lo que resulta en menores costos de desarrollo y mantenimiento.
- Menos código en comparación con SQL incorporado y procedimientos almacenados escritos a mano
- Almacenamiento en caché de objetos transparente en el nivel de aplicación, mejorando el rendimiento del sistema
- Una solución optimizada que hace que una aplicación sea más rápida y fácil de mantener El surgimiento de ORM en el desarrollo de aplicaciones múltiples ha creado un desacuerdo entre los expertos.
Las principales preocupaciones son que ORM no funciona bien y que los procedimientos almacenados pueden ser una mejor solución. Además, la dependencia de ORM puede dar lugar a bases de datos mal diseñadas en ciertas circunstancias.
Eloquent ORM
Eloquent ORM implenta ActiveRecord en base de datos de manera sencilla. A cada table le corresponde un “Modelo” el cual nos permite consultar, registrar y modificar los datos de la base de datos.
Tablas a Utilizar
Creamos la base de dato:
Y en ejecutador de consultas SQL de phpmyadmin ingresamos lo siguiente:
CREATE TABLE shops ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, dealer CHAR(20) DEFAULT '' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer)); INSERT INTO shop VALUES (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45), (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
CONSULTAS
¿Cual es el mas alto numero de articulo?
SQL:
SELECT MAX(article) AS article FROM shop;
LARAVEL:
$high_article = \App\Shop::max('article');
Mostrando la información del articulo mas costoso:
SQL:
SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);
LARAVEL:
$most_expensive = DB::table('shops')->where('price',\App\Shop::max('price'))->get()->first();
Encontrar el más alto precio por articulo
SQL:
SELECT article, MAX(price) AS price FROM shop GROUP BY article;
LARAVEL:
$hightes_prices = DB::table('shops')->select(DB::Raw('MAX(price) as price,article'))->GroupBy('article')->get();
Por cada articulo encontrar los comerciantes(dealers) con el precio mas costoso
SQL:
SELECT s1.article, dealer, s1.price FROM shop s1 JOIN ( SELECT article, MAX(price) AS price FROM shop GROUP BY article) AS s2 ON s1.article = s2.article AND s1.price = s2.price;
LARAVEL:
$more_expensive = DB::table('shops as s1')->join( DB::Raw("(SELECT article, MAX(price) AS price FROM shops GROUP BY article ) AS s2"), function($join){ $join->on('s1.article', '=', 's2.article')->on('s1.price', '=', 's2.price'); } )->get();
Posted from my blog with SteemPress : http://webitacora.com.ve/index.php/2018/04/26/laravel-eloquent-orm-sentencias-simples/