YII fournit un mappeur commercial robuste (ORM) appelé GII qui simplifie le travail avec des bases de données relationnelles, en particulier lorsqu'elle traitant des relations One-to-à-t-to et plusieurs à plusieurs. Ces relations sont définies au sein de vos classes de modèle en utilisant ActiveRecord.
Relations de tête-à-plusieurs: Cela représente un scénario où un enregistrement dans un tableau peut être associé à plusieurs enregistrements dans un autre tableau. Par exemple, un modèle auteur
peut avoir de nombreux modèles book
. Vous définissez cela dans votre modèle auteur
à l'aide de la méthode HasMany ()
:
<code class="php"> & lt ;? php namespace app \ modèles; utiliser yii; Utilisez yii \ db \ activeRecord; Classe Auteur étend activeRecord {public static function tableName () {return 'auteurs'; } fonction publique getBooks () {return $ this- & gt; hasmany (book :: className (), ['auteur_id' = & gt; 'id']); }} </code> pre> <p> Dans cet exemple, <code> getBooks () </code> définit la relation. <code> book :: className () </code> spécifie le modèle associé, et <code> ['auteur_id' = & gt; 'id'] </code> Carte la touche étrangère <code> Author_id </code> dans la table <code> books </code> dans la touche principale <code> id </code> dans la table <code> des auteurs </code>. Maintenant, vous pouvez accéder aux livres d'un auteur comme celui-ci: <code> $ auteur- & gt; livres </code>. </p> <p> <strong> Relations de plusieurs à plusieurs: </strong> Cela représente un scénario où les enregistrements dans un tableau peuvent être associés à plusieurs enregistrements dans un autre tableau et vice-versa. Par exemple, un modèle <code> Student </code> peut être inscrit dans de nombreux modèles <code> Course </code>, et un modèle <code> Course </code> peut avoir de nombreux modèles <code> Student </code>. Cela nécessite une table de jonction (par exemple, <code> student_course </code>) pour relier les deux tables. </p> <pre class="brush:php;toolbar:false"> <code class="php"> & lt ;? php namespace app \ modèles; utiliser yii; Utilisez yii \ db \ activeRecord; La classe Student étend ActiveRecord {public static function tableName () {return 'Students'; } fonction publique getCourses () {return $ this- & gt; hasmany (cours :: className (), ['id' = & gt; 'Course_id']) - & gt; viable ('student_course', [student_id '= & gt;' id ']); }} & lt ;? php namespace app \ modèles; utiliser yii; Utilisez yii \ db \ activeRecord; Le cours de classe étend ActiveRecord {public static function tableName () {return 'Courses'; } fonction publique getStudents () {return $ this- & gt; hasmany (student :: className (), ['id' = & gt; 'student_id']) - & gt; viableable ('student_course', [cours_id '= & gt;' id ']); }} </code> pre> <p> Ici, <code> viatable () </code> spécifie la table de jonction et les mappages de clés étrangers. Vous pouvez accéder aux cours d'un étudiant en utilisant <code> $ Student- & gt; cours </code> et les étudiants d'un cours utilisant <code> $ Course- & gt; étudiants </code>. </p> <h2> meilleures pratiques pour gérer un à plusieurs relations avec un à plusieurs relations dans la base de données Yii: </h2>
getBooks ()
, getCourses ()
) ( avec ()
Méthode) pour récupérer les données connexes dans une seule requête. Par exemple: $ auteur = auteur :: findOne (1) - & gt; avec ('livres') - & gt; one ();
Cela récupère l'auteur et leurs livres dans une requête de base de données. avec ()
est crucial pour éviter les requêtes N 1. Cela améliore considérablement les performances lors de la récupération des données connexes. où ()
et d'autres méthodes de création de requête pour filtrer les données connexes. Par exemple, pour faire publier les livres d'un auteur après une date spécifique: $ auteur- & gt; books () - & gt; où (['& gt;', 'publication_date', '2023-01-01']) - & gt; all ();
crud (créer, lire, mettre à jour, supprimer) sur des données connexes nécessitent une manipulation minutieuse pour maintenir la cohérence des données.
auteur_id
. avec ()
) pour récupérer efficacement les données connexes. deleteall ()
ou de gérer soigneusement le processus de suppression dans une transaction pour empêcher les incohérences de données. N'oubliez pas d'ajuster ces exemples pour correspondre à vos noms de table et de modèle spécifiques. Testez toujours soigneusement votre code pour assurer l'intégrité et les performances des données.
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!