Laravel- Modelo

 Antes de empezar, asegúrate de configurar una conexión de base de datos en config/database.php. Para mayor información sobre la configuración de tu base de datos, revisa la documentación.

configuración de la base de datos


Antes de empezar, asegúrate de configurar una conexión de base de datos en config/database.php

  • Abra su servidor, en mi caso el servidor WAMP, y abra phpmyadmin, luego inicie sesión en la base de datos MySQL, cree una base de datos vacía haciendo clic en nuevo en el panel izquierdo

  • texto alternativo
  • Abra el archivo .env en su IDE o editor de texto.texto alternativoCambie DB_DATABASE por el nombre de su base de datos y si ha establecido un nombre de usuario y contraseña para su phpmyadmin, especifíquelo; de lo contrario, deje el nombre de usuario como root y la contraseña en blanco.


El ORM Eloquent incluido con Laravel proporciona una genial y simple implentación básica de ActiveRecord para trabajar con tu base de datos. Cada tabla de base de datos tiene un correspondiente «Modelo» el cual es usado para interactuar con la tabla. Los modelos permiten que consultes los datos en tus tablas, así como también insertar nuevos registros dentro de la tabla.

Una vez que has creado un modelo y su tabla de base de datos asociada, estás listo para empezar a obtener datos de tu base de datos. Piensa en cada modelo de Eloquent como un constructor de consultas muy poderoso que te permite consultar fluidamente la tabla de base de datos asociada con el modelo.


Definiendo modelos


Para empezar, vamos a crear un modelo de Eloquent. Los modelos residen típicamente en el directorio app, pero eres libre de colocarlos en cualquier parte que pueda ser auto-cargada de acuerdo a tu archivo composer.json. Todos los modelos de Eloquent extienden la clase Illuminate\Database\Eloquent\Model.


La forma más fácil de crear una instancia del modelo es usando el Comando Artisan make:model:


php artisan make:model Flight


Si prefieres generar una migración de base de datos cuando generes el modelo, puedes usar la opción --migration o -m


php artisan make:model Flight --migration

php artisan make:model Flight -m


Convenciones del modelo Eloquent


Ahora, vamos a mirar un modelo Flight de ejemplo, el cual usaremos para obtener y guardar información desde nuestra tabla de base de datos flights:


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model

{

    //

}

Nombres de tabla


Observa que no le dijimos a Eloquent cuál tabla usar para nuestro modelo Flight. Por convención, el nombre de la clase en plural y en formato «snake_case» será usado como el nombre de tabla a menos que otro nombre sea especificado expresamente. Así, en este caso, Eloquent asumirá que el modelo Flight guarde los registros en la tabla flights. Puedes especificar una tabla personalizada al definir una propiedad table en tu modelo:


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model

{

    /**

    * The table associated with the model.

    *

    * @var string

    */

    protected $table = 'my_flights';

}


Claves primarias



Eloquent asumirá que cada tabla tiene una columna de clave primaria denominada id. Puedes definir una propiedad $primaryKey protegida para sobrescribir esta convención:



<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model

{

    /**

    * The primary key associated with the table.

    *

    * @var string

    */

    protected $primaryKey = 'flight_id';

}


Además, Eloquent asume que la clave primaria es un valor entero autoincremental, lo que significa que de forma predeterminada la clave primaria será convertida a un tipo int automáticamente. Si deseas usar una clave primaria que no sea de autoincremento o numérica debes establecer la propiedad pública $incrementing de tu modelo a false:


<?php

class Flight extends Model

{

    /**

    * Indicates if the IDs are auto-incrementing.

    *

    * @var bool

    */

    public $incrementing = false;

}


Si tu clave primaria no es un entero, debes establecer la propiedad protegida $keyType de tu modelo a string:


<?php

class Flight extends Model

{

    /**

    * The "type" of the auto-incrementing ID.

    *

    * @var string

    */

    protected $keyType = 'string';

}



Obteniendo modelos


Una vez que has creado un modelo y su tabla de base de datos asociada, estás listo para empezar a obtener datos de tu base de datos. Piensa en cada modelo de Eloquent como un constructor de consultas muy poderoso que te permite consultar fluidamente la tabla de base de datos asociada con el modelo. Por ejemplo:



<?php

$flights = App\Flight::all();

foreach ($flights as $flight) {

    echo $flight->name;

}


Añadiendo restricciones adicionales


El método all de Eloquent devolverá todos los resultados en la tabla del modelo. Ya que cada modelo de Eloquent sirve como un constructor de consultas, también puedes añadir restricciones a las consultas y entonces usar el método get para obtener los resultados:


$flights = App\Flight::where('active', 1)

                ->orderBy('name', 'desc')

                ->take(10)

                ->get();



Actualizando modelos


Podemos actualizar modelos usando los métodos fresh y refresh. El método fresh volverá a recuperar el modelo de la base de datos. La instancia de modelo existente no será afectada:


$flight = App\Flight::where('number', 'FR 900')->first();

$freshFlight = $flight->fresh();


El método refresh «rehidratará» el modelo existente usando datos nuevos de la base de datos. Además, todas sus relaciones cargadas previamente serán también actualizadas:



$flight = App\Flight::where('number', 'FR 900')->first();

$flight->number = 'FR 456';

$flight->refresh();

$flight->number; // "FR 900"


Colecciones


Para métodos de Eloquent como all y get que obtienen varios resultados, se devolverá una instancia de Illuminate\Database\Eloquent\Collection. La clase Collection proporciona una variedad de métodos útiles para trabajar con los resultados de Eloquent:


$flights = $flights->reject(function ($flight) {

    return $flight->cancelled;

});


También puedes recorrer la colección como un arreglo:


foreach ($flights as $flight) {

    echo $flight->name;

}


Resultados divididos en partes (chunk)



Si necesitas procesar miles de registros de Eloquent, usa el comando chunk. El método chunk obtendrá una «porción» de los modelos de Eloquent, incorporándolos a una Closure dada para procesamiento. Usando el método chunk ahorrarás memoria al momento de trabajar con grandes conjuntos de resultados:


Flight::chunk(200, function ($flights) {

    foreach ($flights as $flight) {

        //

    }

});



El primer argumento pasado al método es el número de registros que deseas obtener por cada «porción». La Closure pasada como segundo argumento será ejecutada para cada porción que sea obtenida de la base de datos. Una consulta de base de datos será ejecutada para obtener cada porción de registros pasados a la Closure.


Subconsultas avanzadas


Selects de subconsultas

Eloquent también ofrece soporte avanzado para subconsultas, lo que te permite extraer información de tablas relacionadas en una sola consulta. Por ejemplo, imaginemos que tenemos una tabla de destinos de vuelos destinations y una tabla de vuelos flights hacia los destinos. La tabla flights contiene una columna arrived_at que indica cuando el vuelo ha arribado al destino.


Usando la funcionalidad de subconsulta disponible en los métodos select y addSelect, podemos seleccionar todos los destinations (destinos) y el nombre del vuelo que más recientemente arribó a dicho destino usando una única consulta:


use App\Destination;

use App\Flight;

return Destination::addSelect(['last_flight' => Flight::select('name')

    ->whereColumn('destination_id', 'destinations.id')

    ->orderBy('arrived_at', 'desc')

    ->limit(1)

])->get();



Ordenando subconsultas


Adicionalmente, la función orderBy del constructor de consultas soporta subconsultas. Podemos usar esta funcionalidad para ordenar los destinos en base a cuando llegó el último vuelo a dicho destino. De nuevo, esto puede ser hecho ejecutando una única consulta en la base de datos:


return Destination::orderByDesc(

    Flight::select('arrived_at')

        ->whereColumn('destination_id', 'destinations.id')

        ->orderBy('arrived_at', 'desc')

        ->limit(1)

)->get();



Obteniendo modelos individuales / Agrupamientos


Además de obtener todos los registros de una tabla dada, también puedes obtener registros individuales usando find, first o firstWhere. En lugar de devolver una colección de modelos, estos métodos devuelven una única instancia de modelo:



// Retrieve a model by its primary key...

$flight = App\Flight::find(1);

// Retrieve the first model matching the query constraints...

$flight = App\Flight::where('active', 1)->first();

// Shorthand for retrieving the first model matching the query constraints...

$flight = App\Flight::firstWhere('active', 1);


También puedes ejecutar el método find con un arreglo de claves primarias, el cual devolverá una colección de los registros que coincidan:


$flights = App\Flight::find([1, 2, 3]);


Algunas veces puedes querer retornar el primer resultado de una consulta o realizar alguna otra acción si ningún resultado es encontrado. El método firstOr retornará el primer resultado encontrado o, si ningún resultado es encontrado, ejecutará el callback dado. El resultado del callback será considerado el resultado del método firstOr


$model = App\Flight::where('legs', '>', 100)->firstOr(function () {

        // ...

});


Comentarios

Entradas populares de este blog

Filtrando por fecha

10 videojuegos gratis para aprender JavaScript en línea

reloj obs---datetime.lua