Développement Laravel : Comment utiliser Laravel Eloquent pour implémenter des associations polymorphes ?
L'association polymorphe est une fonctionnalité importante de Laravel Eloquent, qui permet à un modèle d'établir des relations avec plusieurs modèles différents. Dans les applications pratiques, le traitement de différents types de données est relativement simple et efficace, notamment dans la conception de bases de données. Dans cet article, nous verrons comment implémenter des associations polymorphes à l'aide de Laravel Eloquent.
1. Qu'est-ce que l'association polymorphe ?
L'association polymorphe fait référence à l'établissement d'une relation d'association entre un modèle et plusieurs modèles différents, qui peut être considérée comme une référence à une catégorie générale. Cela peut apporter de la commodité à de nombreuses applications, telles que :
2. Méthodes pour implémenter une association polymorphe
Voyons comment utiliser Laravel Eloquent pour implémenter une association polymorphe.
Tout d'abord, nous devons considérer la conception du tableau de données. Nous devons créer une table intermédiaire pour stocker les relations polymorphes entre les modèles. Ce tableau doit contenir les colonnes suivantes :
<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateCommentsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->morphs('commentable'); $table->text('content'); $table->timestamps(); }); Schema::create('votes', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('user_id'); $table->unsignedBigInteger('voteable_id'); $table->string('voteable_type'); $table->enum('type', ['up', 'down']); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('comments'); Schema::dropIfExists('votes'); } }
Dans le fichier de migration ci-dessus, nous avons créé deux nouvelles tables : commentaires et votes.
La table des commentaires contient des informations de base sur le modèle de commentaire et la méthode morphs() est utilisée pour implémenter le pointage d'association polymorphe. La table des votes est similaire, utilisant les champs voteable_id et voteable_type pour implémenter une association polymorphe.
Ensuite, nous devons définir la relation d'association dans le modèle Eloquent.
Modèle de commentaire :
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Comment extends Model { use HasFactory; public function commentable() { return $this->morphTo(); } public function votes() { return $this->morphMany(Vote::class, 'voteable'); } }
Modèle de vote :
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Vote extends Model { use HasFactory; public function voteable() { return $this->morphTo(); } public function user() { return $this->belongsTo(User::class); } }
Le code ci-dessus définira des relations polymorphes pour le modèle Comment et le modèle Vote respectivement. Dans le modèle Comment, nous utilisons la méthode morphTo() pour définir l'association polymorphe au commentaire, tandis que dans le modèle Vote, nous utilisons la méthode morphMany() pour définir l'association polymorphe au commentaire.
3. Utiliser l'association polymorphe
Voyons comment utiliser l'association polymorphe.
Créez un commentaire :
$article = Article::find(1); $comment = $article->comments()->create([ 'content' => 'This is a comment', ]);
Obtenez des votes pour un commentaire :
$votes = $comment->votes;
Obtenez des commentaires pour un article :
$comments = $article->comments;
Vote :
$comment->votes()->create([ 'user_id' => 1, 'type' => 'up', ]);
L'exemple de code ci-dessus démontre l'utilisation de base des associations polymorphes, que vous pouvez trouver dans le Documentation Laravel Eloquent Plus de détails sur cette fonctionnalité.
Résumé
L'association polymorphe est l'une des fonctionnalités importantes de Laravel Eloquent, qui permet à un modèle d'établir des relations avec plusieurs modèles différents. Très utile dans la conception de bases de données et le développement d'applications. Lorsque vous utilisez Laravel Eloquent pour implémenter des relations polymorphes, vous devez concevoir la table intermédiaire de la relation et définir la relation dans le modèle Eloquent. Nous pouvons utiliser les méthodes morphTo() et morphMany() pour implémenter des relations polymorphes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!