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:
- Dans le dossier App:
app/Cat.php
- 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 |
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]);