Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/eloquent»

De WikiEducator
Saltar a: navegación, buscar
(Eloquent)
Línea 19: Línea 19:
 
;ORM realciona un modelo con una tabla
 
;ORM realciona un modelo con una tabla
 
*Por defecto se asumen una serie de valores que se pueden modificar en el modelo
 
*Por defecto se asumen una serie de valores que se pueden modificar en el modelo
*Para ello habría que establecer valores a otros atributos
+
*Para ello habría que establecer valores a otros atributos en la clase
}}
+
{{Nota|Ponemos el ejemplo de haber creado un modelo llamado User}}
;Nombre de tabla
+
<source lang=php>
{| style="border:1px solid #B8C7D9; text-align:left;  background:#f5faff; font-size: 95%;"
+
<?php
|-
+
| width="25%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|'''Modelo'''
+
| style="background: #cedff2; padding: 3px 5px; text-align:center;"|'''Tabla'''
+
| width="50%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|'''Atributo para modificar'''
+
|-
+
|style="padding: 3px 5px; text-align:center;"|
+
'''Alumno'''
+
|style="padding: 3px 5px; text-align:center;"|
+
'''alumnos'''
+
|style="padding: 3px 5px; text-align:center;"|
+
'''protected $table='otroNombreTabla'''
+
|-
+
  
|}
+
namespace App;
;Clave primaria
+
{| style="border:1px solid #B8C7D9; text-align:left;  background:#f5faff; font-size: 95%;"
+
|-
+
| width="25%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|
+
| style="background: #cedff2; padding: 3px 5px; text-align:center;"|'''Por defecto'''
+
| width="50%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|'''Atributo para modificar'''
+
|-
+
| width="25%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|
+
Nombre|id|$primaryKey|
+
| width="25%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|
+
tipo|int|$keyType = string|
+
| width="25%" style="background: #cedff2; padding: 3px 5px; text-align:center;"|
+
propiedad|autoincrementint|$autoincrement=false|
+
  
|}
+
use Illuminate\Database\Eloquent\Model;
  
 +
class User extends Model
 +
{
 +
   
 +
//Nombre de la tabla
 +
//por defecto el nombre del modelo en plural
 +
//y minúscula
 +
$protected $table = 'nombre_tabla'; //por defecto users,
  
  
 +
//Clave principal
 +
//Por defecto id de tipo int autoincrement 
 +
$primaryKey="otro_nombre"; // por defecto id
 +
$incrementing=false; //por defecto true
 +
$keyType="string";// por defecto int
  
 +
//Timestamps
 +
//Por defecto espera gestinar dos campos
 +
//created_at y updated_at
 +
//Información temporar de cuándo modificación de valores
 +
//Si no van a existir en la tabla
 +
$timestamps = false;//Por defecto true
  
  
  
 +
 +
 +
 +
   
 +
 +
 +
 +
 +
}
 +
 +
 +
 +
 +
 +
</source>
 +
 +
 +
 +
}}
  
  

Revisión de 08:18 26 feb 2018



Eloquent

  • Eloquent es un modelo objeto-Relacional ORM que se implementa en laravel.
  • Esta una clase que nos va a permitir trabajar de forma sencilla y muy productiva con una base de datos
  • Para usarlo partimos de la idea de que cada tabla de la base de datos con la que trabajamos tiene un modelo creado en nuestro proyecto .
  • Cada modelo permite trabajar con esa tabla.
  • Los modelos los crearemos en la carpeta apt/models


Icon activity.jpg
Crear un modelo (Alumno)
php artisan make:model Alumno
  • Crea una clase llamada Alumno en el dir app





Icon activity.jpg
Crear un modelo (Alumno) con migración
php artisan make:model Alumno --migration

o

php artisan make:model Alumno -m





Icon activity.jpg
Laravel modelo-tabla
ORM realciona un modelo con una tabla
  • Por defecto se asumen una serie de valores que se pueden modificar en el modelo
  • Para ello habría que establecer valores a otros atributos en la clase

(Comment.gif: Ponemos el ejemplo de haber creado un modelo llamado User)


<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
 
//Nombre de la tabla 
//por defecto el nombre del modelo en plural
//y minúscula
$protected $table = 'nombre_tabla'; //por defecto users,
 
 
//Clave principal
//Por defecto id de tipo int autoincrement  
$primaryKey="otro_nombre"; // por defecto id
$incrementing=false; //por defecto true
$keyType="string";// por defecto int
 
//Timestamps
//Por defecto espera gestinar dos campos
//created_at y updated_at
//Información temporar de cuándo modificación de valores
//Si no van a existir en la tabla
$timestamps = false;//Por defecto true
 
 
 
 
 
 
 
 
 
 
 
}








Class Usuario extends Eloquent{ }

  • Por convención la clase Usuario interactuaría con el modelo usuarios
  • Pero podemos especificar el nombre de la tabla que es un atributo de la clase

Class Usuario extends Eloquent{

  protected $table = 'usuarios';

}

  • Otras propiedades que podemos utilizar que tienen valor por defecto pero podemos modificar

Class Usuario extends Eloquent{

  protected $table = 'usuarios';
  protected $connection = 'tienda'; //Por defecto la conexión mysql de database.php
  protected $primaryKey = 'codigo'; //Por defecto id
  protected $timestamps = 'false'; //Por defecto true para actualizar los campos create_at update_up

}

  • Como vemos el modelo da por supuesto que existen una serie de campos en la tabla, si no es así hay que especificarlo

Interactuando con la tabla

  • Para obtener todos los registros de la tabla all()
$usuarios = Ususario::all();
foreach( $usuarios as $usuario){
    echo $usuario->nombre;
}

Sería equivalente a hacer

Select * from usuarios;
  • Obetener un solo registro (necesitamos para ello usar compos únicos como $id
$id=58;
$usuario = Ususario::find($id);
  • Obtener solo algún campo de la tabla
$id=58;
$usuario = Ususario::find($id, array('nombre'));
echo "Usuario encontrado ". $usuario->nombre;
8
  • Obetener registros que cumplan una condicion where(..)->get()
$usuarios = Ususario::where('edad','>',18)->get();
foreach( $usuarios as $usuario){
    echo $usuario->nombre;
}
  • Podemos usar una serie de métodos mágicos del tipo whereNombreColumna
//Todos los usuarios de 20 años
$usuarios = Ususario::whereEdad(20)->get();
foreach( $usuarios as $usuario){
    echo $usuario->nombre;
}
Insertar registros save()
  • Para insertar registros simplemente asignaremos valor a cada campo del modelo y usaremos el método save
$usuario = new Ususario;
 
$user->nombre = 'Maria';
$user->edad = 30;
$user->direccion = 'Casa de Maria';
$user->save();
Borrar registros delete()
  • Para borrar un lo localizamos y usamos el método delete()

$user = User::find(1);

$user->delete();

$usuario = Usuario::find(1);//Localizamos el usuario con id 1
 
$user->delete();