Recherche…


Faire un modèle

La création du modèle

Les classes de modèle doivent étendre Illuminate\Database\Eloquent\Model . L'emplacement par défaut des modèles est le répertoire /app .

Une classe de modèle peut être facilement générée par la commande Artisan :

php artisan make:model [ModelName]

Cela créera un nouveau fichier PHP dans app/ par défaut, qui s'appelle [ModelName].php , et contiendra toute la langue de base pour votre nouveau modèle, qui inclut la classe, l'espace de nommage et l'utilisation requise pour une configuration de base.

Si vous souhaitez créer un fichier de migration avec votre modèle, utilisez la commande suivante, où -m générera également le fichier de migration:

php artisan make:model [ModelName] -m

Outre la création du modèle, cette opération crée une migration de base de données connectée au modèle. Le fichier PHP de migration de la base de données se trouve par défaut dans database/migrations/ . Par défaut, cela n'inclut rien d'autre que les colonnes id et created_at / updated_at . Vous devrez donc modifier le fichier pour fournir des colonnes supplémentaires.

Notez que vous devrez exécuter la migration (une fois que vous avez configuré le fichier de migration) pour que le modèle puisse commencer à utiliser php artisan migrate depuis la racine du projet.

De plus, si vous souhaitez ajouter une migration ultérieurement, vous pouvez le faire en exécutant le modèle suivant:

php artisan make:migration [migration name]

Disons par exemple que vous vouliez créer un modèle pour vos chats, vous auriez deux choix, créer avec ou sans migration. Vous auriez choisi de créer sans migration si vous aviez déjà une table de chats ou si vous ne souhaitiez pas en créer une pour le moment.

Pour cet exemple, nous voulons créer une migration car nous n’avons pas déjà de table, donc nous allons exécuter la commande suivante.

php artisan make:model Cat -m

Cette commande va créer deux fichiers:

  1. Dans le dossier App: app/Cat.php
  2. Dans le dossier de la base de données: database/migrations/timestamp_creat_cats_table.php

Le fichier qui nous intéresse est celui-ci car c'est ce fichier que nous pouvons décider de ce que nous voulons que la table ressemble et soit inclus. Pour toute migration prédéfinie, une colonne d'auto-incrémentation automatique et des colonnes d'horodatage sont attribuées.

L'exemple ci-dessous d'un extrait du fichier de migration inclut les colonnes prédéfinies ci-dessus ainsi que l'ajout du nom du chat, de l'âge et de la couleur:

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

        });
    }

Comme vous pouvez le constater, il est relativement facile de créer le modèle et la migration pour une table. Ensuite, pour exécuter la migration et la créer dans votre base de données, exécutez la commande suivante:

php artisan migrate

Qui va migrer toutes les migrations en attente vers votre base de données.


Emplacement du fichier de modèle

Les modèles peuvent être stockés n'importe où grâce au PSR4 .

Par défaut, les modèles sont créés dans le répertoire app avec l'espace de noms de l' App . Pour les applications plus complexes, il est généralement recommandé de stocker les modèles dans leurs propres dossiers dans une structure adaptée à l'architecture de vos applications.

Par exemple, si vous avez une application qui utilise une série de fruits en tant que modèles, vous pouvez créer un dossier appelé app/Fruits et dans ce dossier, vous créez Banana.php (en respectant la convention de nommage StudlyCase ). dans l'espace de noms App\Fruits :

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

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

Configuration du modèle

Eloquent suit une approche "convention over configuration". En étendant la classe Model base, tous les modèles héritent des propriétés répertoriées ci-dessous. Sauf en cas de substitution, les valeurs par défaut suivantes s'appliquent:

Propriété La description Défaut
protected $connection Nom de connexion à la base de données Connexion DB par défaut
protected $table Nom de la table Par défaut, le nom de la classe est converti en snake_case et pluralized. Par exemple, SpecialPerson devient special_people
protected $primaryKey Tableau PK id
public $incrementing Indique si les ID sont auto-incrémentés true
public $timestamps Indique si le modèle doit être horodaté true
const CREATED_AT Nom de la colonne d'horodatage de création created_at
const UPDATED_AT Nom de la colonne d'horodatage de modification updated_at
protected $dates Attributs devant être mutés à DateTime, en plus des attributs d'horodatage []
protected $dateFormat Format dans lequel les attributs de date seront persistés Par défaut pour le dialecte SQL actuel.
protected $with Relations avec impatience avec le modèle []
protected $hidden Attributs omis dans la sérialisation du modèle []
protected $visible Attributs autorisés dans la sérialisation du modèle []
protected $appends Accesseurs d'attributs ajoutés à la sérialisation du modèle []
protected $fillable Attributs pouvant être assignés en masse []
protected $guarded Attributs classés par liste noire de l'affectation de masse [*] (Tous les attributs)
protected $touches Les relations à toucher lors de la sauvegarde []
protected $perPage Le nombre de modèles à retourner pour la pagination. 15
5.0
Propriété La description Défaut
protected $casts Attributs devant être convertis en types natifs []

Mettre à jour un modèle existant

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

Vous pouvez également mettre à jour plusieurs attributs à la fois en utilisant update , ce qui ne nécessite pas l'utilisation de save after:

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

Vous pouvez également mettre à jour un modèle sans l'interroger au préalable:

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

Si vous ne voulez pas déclencher une modification de l'horodatage updated_at sur le modèle, vous pouvez passer l'option touch :

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow