Chose Language:
Author: Admin/Publisher |not checked

Modelos en Laravel

Los modelos los puede ver algo un poco diferentes en laravel, debido a que hay muchos ejemplos en que se hacen consultas en los controladores(ver controladores en larvel), si las consultas son simples esta bastante bien hacerlas aquí.

No tiene nada de malo tenerla en el controlador o en el Modelo o en otro lugar solo vea lo que más le conviene solo no las pongan en las vistas.

Aquí veremos la parte esencial de la que se encarga el Model en Laravel.

Los modelos son para interactuar con nuestra base de datos de esta manera podemos hacer cualquier clase de consulta a nuestra base de datos por ejemplo: insertar, borrar, modificar, mostrar.

Creando un Modelo(Model)

Para crear un modelo es muy simple en Laravel, lo puede hacer manualmente, pero también puede usar la consola y escribir algo con la siguiente sintaxis.

carpeta del proyecto
php artisan make:model <nombre-del-modelo>

Un ejemplo:

carpeta del proyecto
php artisan make:model vehiculo

Ademas de esto podemos pedirle que cree una migración(ver migraciones en laravel) para nuestro modelo, la sintaxis seria la siguiente:

carpeta del proyecto
php artisan make:model <nombre-del-modelo> [--migration|-m]

si no esta entendiendo la sintaxis en<> y [] es que es opcional y| quiere decir que es este valor o el otro. Así pues si seguimos con el ejemplo de vehículo podríamos escribirlo de las 2 siguientes maneras

carpeta del proyecto
php artisan make:model Vehiculo --migration

o

carpeta del proyecto
php artisan make:model Vehiculo -m

Bueno basta de introducciones y creemos el modelo y la migración también veamos que hace esto. Por convención escriba el nombre del modelo en mayúsculas, ya que creara una clase.

Corre en tu proyecto:

php artisan make:model Vehiculo -m
git bash – php artisan make:model Vehiculo -m

como puede ver aqui crea el model(Model) y la migración para este la cual se llama 2019_04_140609_create_vehiculos_table.

La migración no la vamos a ver veamos el modelo. Lo puede encontrar en app>Vehiculo.php en este caso.

– Los modelos son creados dentro de la carpeta app pero también puede cambiar la carpeta donde se crean(no es recomendad, tenga en cuenta que otro programador podría tomar el programa luego) en composer.json.
app/Vehiculo.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Vehiculo extends Model
{
    //
}

Atributos

Ahora usted se preguntará como sabe con qué tabla en la base de datos se relaciona el Modelo si no tiene nada escrito pues bien el modelo asume que la tabla de la base de datos tiene su nombre en plural. En este caso vehículos.

En español y otros lenguajes que no sean en ingles esto puede complicarnos un poco. Por eso también se pensó en que la base de datos podría tener otro nombre en vez del plural.

Haré el ejemplo un tanto grosero de como hacer esto. Supongamos que queremos que el modelo sea para la tabla vehiculo_automotor.

Para eso tenemos que agregar la siguiente tabla dentro de la clase vehiculo_automotor.

app/Vehiculo.php
protected $table = 'vehiculos_automotor';

Laravel chequea si existe esta variable y si no existe usa el plural(vehiculos). Veamos como quedaría este modelo.

app/Vehiculo.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Vehiculo extends Model
{
    protected $table = 'vehiculos_automotor';
}

El atributo Timestamps

Si nuestra tabla en la base de datos no tiene timestamps podemos declarar el timestamp como false en nuestro modelo (estos son create_at y update_at y son creados en la migración).

case Timestamps does not exist in table
public $timestamps = false;

Atributos Predefinidos

También le podemos definir atributos por defectos por ejemplo las luces de mi vehículo.

atributos por defecto
protected $attributes = [
        'luces' => "Luces diurnas con LEDS ",
    ];

Evitar vulnerabilidades por Mass Assigment (asignación masiva)

Para evitar que su aplicación tenga una vulnerabilidad de tipo mass assignment. Debe especificar los campos que se pueden tener mass assignment o asignación masiva.

Con fillable puede especificar que campos pueden tener asignación masiva y con guarded hace lo opuesto.

Si usa fillable no use guarded, fillable especifica que campos van a poder ser asignarse masivamente, el resto los toma como no asignables.

En cambio guarded hace lo contrario a fillable. Úselos según le convenga o el que este mas acostumbrado.

mass assignment is allowed on name attribute
protected $fillable = ['name'];// estoy haciendo mass assigment estos atributos

con guarded:

mass asignment is not allowed on name
protected $guarded = ['name'];// no estoy haciendo mass assigment estos atributos

Como acceder a nuestro Modelo

A nuestro modelo podemos acceder tanto de la ruta como desde el controlador usando la siguiente sintaxis.

getting data
App\<model>::<algun comando del eloquent>

Veamos un ejemplo en una ruta(ver rutas en laravel). Recuerda los closures?

routes/web.php
Route::get("vehiculos/show",function(){
    $vehiculos = App\Vehiculo::all();

    foreach ($vehiculos as $vehiculo) {
        echo $vehiculo->modelo."<br/>";
    }
});

Esto nos dará la siguiente lista.

renault clio 1.4
ford fiesta
Volkswagen Amarok 2.0 
Chery Tiggo 2.0 Luxury 

En los controladores puede declarar que usara model después del namespace usando la palabra clave use.

usar un modelo dentro del controlador
use <nombre_modelo>

Ejemplo con un controlador para vehículo.

app/Http/Controllers/VehiculoController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Vehiculo;

class VehiculoController extends Controller
{
    public function show(){
        $vehiculos = Vehiculo:: all();
        foreach($vehiculos as $vehiculo){
            echo $vehiculo->modelo."<br/>";
        } 
    }
}

Referencia https://laravel.com/docs/5.8/eloquent#introduction

Category: laravel
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category