Buscar..


Haciendo un modelo

Creación de modelos

Las clases de modelo deben extender Illuminate\Database\Eloquent\Model . La ubicación predeterminada para los modelos es el directorio /app .

El comando Artesano puede generar fácilmente una clase modelo:

php artisan make:model [ModelName]

Esto creará un nuevo archivo PHP en la app/ por defecto, que se llamará [ModelName].php , y contendrá todo el texto de su nuevo modelo, que incluye la clase, el espacio de nombres y los usos necesarios para una configuración básica.

Si desea crear un archivo de migración junto con su Modelo, use el siguiente comando, donde -m también generará el archivo de migración:

php artisan make:model [ModelName] -m

Además de crear el modelo, esto crea una migración de base de datos que está conectada al modelo. El archivo PHP de migración de la base de datos se encuentra por defecto en la database/migrations/ de database/migrations/ . De manera predeterminada, esto no incluye nada más que las columnas id y created_at / updated_at , por lo que deberá editar el archivo para proporcionar columnas adicionales.

Tenga en cuenta que tendrá que ejecutar la migración (una vez que haya configurado el archivo de migración) para que el modelo comience a funcionar utilizando php artisan migrate desde la raíz del proyecto

Además, si desea agregar una migración más adelante, después de hacer el modelo, puede hacerlo ejecutando:

php artisan make:migration [migration name]

Digamos, por ejemplo, que quería crear un modelo para sus gatos, tendría dos opciones, crear con o sin migración. Elegiría crear sin migración si ya tenía una tabla de gatos o no quería crear una en este momento.

Para este ejemplo, queremos crear una migración porque todavía no tenemos una tabla, así que ejecutaríamos el siguiente comando.

php artisan make:model Cat -m

Este comando creará dos archivos:

  1. En la carpeta de app/Cat.php : app/Cat.php
  2. En la carpeta de la base de datos: database/migrations/timestamp_creat_cats_table.php

El archivo en el que estamos interesados ​​es el último, ya que es este archivo en el que podemos decidir cómo queremos que se vea e incluya la tabla. Para cualquier migración predefinida se nos da una columna de ID de incremento automático y columnas de marcas de tiempo.

El siguiente ejemplo de un extracto del archivo de migración incluye las columnas predefinidas anteriores, así como la adición del nombre del gato, la edad y el color:

public function up()
    {
        Schema::create('cats', function (Blueprint $table) {

            $table->increments('id');    //Predefined ID
            $table->string('name');      //Name
            $table->integer('age');      //Age
            $table->string('colour');    //Colour
            $table->timestamps();        //Predefined Timestamps

        });
    }

Como puede ver, es relativamente fácil crear el modelo y la migración para una tabla. Luego, para ejecutar la migración y crearla en su base de datos, ejecutará el siguiente comando:

php artisan migrate

Lo que migrará cualquier migración pendiente a su base de datos.


Ubicación del archivo de modelo

Los modelos se pueden almacenar en cualquier lugar gracias a PSR4 .

Por defecto, los modelos se crean en el directorio de la app con el espacio de nombres de la App . Para aplicaciones más complejas, generalmente se recomienda almacenar los modelos dentro de sus propias carpetas en una estructura que tenga sentido para la arquitectura de sus aplicaciones.

Por ejemplo, si tenía una aplicación que utilizaba una serie de frutas como modelos, podría crear una carpeta llamada app/Fruits y dentro de esta carpeta, crea Banana.php (manteniendo la convención de nombres de StudlyCase ), luego puede crear la clase Banana. en el espacio de nombres de App\Fruits :

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

class Banana extends Model {
    // Implementation of "Banana" omitted
}

Configuración del modelo

Elocuente sigue un enfoque de "convención sobre configuración". Al ampliar la clase de Model base, todos los modelos heredan las propiedades que se enumeran a continuación. A menos que se invalide, se aplican los siguientes valores predeterminados:

Propiedad Descripción Defecto
protected $connection Nombre de conexión DB Conexión DB predeterminada
protected $table Nombre de la tabla De forma predeterminada, el nombre de la clase se convierte a snake_case y se pluraliza. Por ejemplo, SpecialPerson convierte en special_people
protected $primaryKey Tabla PK id
public $incrementing Indica si las ID son auto-incrementales true
public $timestamps Indica si el modelo debe tener la marca de tiempo. true
const CREATED_AT Nombre de la columna de marca de tiempo de creación created_at
const UPDATED_AT Nombre de la columna de marca de tiempo de modificación updated_at
protected $dates Atributos que deben mutarse a DateTime, además de los atributos de marca de tiempo []
protected $dateFormat Formato en el que se conservarán los atributos de fecha. Por defecto para el dialecto SQL actual.
protected $with Relaciones a eagerload con modelo. []
protected $hidden Atributos omitidos en la serialización del modelo []
protected $visible Atributos permitidos en la serialización del modelo. []
protected $appends Atributos de acceso añadido a la serialización del modelo. []
protected $fillable Atributos que son asignables en masa []
protected $guarded Atributos que están en la lista negra de la asignación en masa [*] (Todos los atributos)
protected $touches Las relaciones que se deben tocar en guardar. []
protected $perPage El número de modelos a devolver por paginación. 15
5.0
Propiedad Descripción Defecto
protected $casts Atributos que deben ser convertidos a tipos nativos []

Actualizar un modelo existente

$user = User::find(1);
$user->name = 'abc';
$user->save();

También puede actualizar varios atributos a la vez usando la update , que no requiere usar save después:

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);

También puede actualizar un modelo (s) sin consultarlo de antemano:

User::where('id', '>', 2)->update(['location' => 'xyz']);

Si no desea activar un cambio en la marca de tiempo updated_at en el modelo, puede pasar la opción touch :

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow