Maison >développement back-end >tutoriel php >Yii 2.0 activeRecord a expliqué
yii 2.0 activeRecord: une plongée profonde dans la cartographie relationnelle des objets
ACTIVERECORD ACTIVERECORD DE YII 2.0 fournit une interface de mappage d'objet-relation (ORM) robuste, simplifiant les interactions de base de données. Cette approche, commune dans des cadres comme Laravel et Ruby on Rails, offre des fonctionnalités telles que l'attribution de masse, la validation et le comportement basé sur les scénarios. Explorons ses capacités et ses fonctionnalités avancées.
Fonctionnalité de base (héréditaire de yiibasemodel):
Attributs: Les données du modèle sont stockées dans des attributs accessibles au public. L'attribution de masse est facilitée en attribuant des tableaux à la propriété , en tirant parti des méthodes attributes
et __set()
héritées de setAttributes()
. La récupération d'attribut utilise de la même manière yiibaseComponent
et __get()
. Les étiquettes d'attribut, cruciales pour les interfaces utilisateur, sont définies à des fins d'affichage. getAttributes()
Validation: La méthode définit les règles de validation pour les attributs, assurant l'intégrité des données. Par défaut, seuls les attributs "sûrs" (ceux avec des règles de validation définis) sont assistés en masse. rules()
Scénarios: Les scénarios permettent de définir différentes règles de validation et de traitement des données en fonction du contexte (par exemple, enregistrement vs connexion). Cela améliore la flexibilité et la maintenabilité.
Création d'un modèle ActiveRecord:
L'exemple utilise une structure de blog simple (voir l'image ci-dessus). Le modèle, généré à l'aide de GII, montre la structure de base: Articles
<code class="language-php">namespace app\models; use Yii; class Articles extends \yii\db\ActiveRecord { // ... (tableName(), rules(), attributeLabels() as shown in the original text) ... public function getAuthors() { return $this->hasOne(Authors::className(), ['ID' => 'AuthorsID']); } public function getArticlestags() { return $this->hasMany(Articlestags::className(), ['ArticlesID' => 'ID']); } public function getTags() { return $this->hasMany(Tags::className(), ['ID' => 'TagsID']) ->viaTable(Articlestags::tableName(), ['ArticlesID' => 'ID']); } }</code>Notez l'ajout de la méthode
, qui définit la relation plusieurs à plusieurs avec getTags()
via la table de jonction Tags
. Articlestags
Utilisation avancée:
yii 2.0 activeRecord améliore la fonctionnalité de base avec plusieurs caractéristiques avancées:
Attributs sales: Suivre les modifications des attributs du modèle à l'aide de , getDirtyAttributes()
et isAttributeChanged()
. Ceci est inestimable pour mettre à jour efficacement les enregistrements de la base de données. markAttributeDirty()
Arrayable: La méthode , héritée via le trait toArray()
, convertit le modèle en un tableau. Arrayable
et fields()
Autoriser la personnalisation du contenu du tableau, y compris les champs calculés. Par exemple, l'ajout d'une chaîne de balises séparée par des virgules: extraFields()
<code class="language-php">namespace app\models; use Yii; class Articles extends \yii\db\ActiveRecord { // ... (tableName(), rules(), attributeLabels() as shown in the original text) ... public function getAuthors() { return $this->hasOne(Authors::className(), ['ID' => 'AuthorsID']); } public function getArticlestags() { return $this->hasMany(Articlestags::className(), ['ArticlesID' => 'ID']); } public function getTags() { return $this->hasMany(Tags::className(), ['ID' => 'TagsID']) ->viaTable(Articlestags::tableName(), ['ArticlesID' => 'ID']); } }</code>
beforeValidate()
, afterSave()
). Ceux-ci permettent de personnaliser le comportement sans modifier le code du modèle de base. Par exemple, la mise à jour automatique LastEdited
: <code class="language-php">public function extraFields() { return [ 'tagsString' => function () { return implode(', ', array_map(function ($tag) { return $tag->Tag; }, $this->tags)); }, ]; }</code>
BlameableBehavior
(suivi des créateurs / mises à jour) et TimestampBehavior
(horodatage automatique). Attacher ces comportements: <code class="language-php">public function beforeValidate() { $this->LastEdited = new \yii\db\Expression('NOW()'); return parent::beforeValidate(); }</code>
transactions()
définit quelles opérations doivent être enveloppées dans les transactions de base de données, assurant la cohérence des données. Conclusion:
yii 2.0 activeRecord fournit un ORM puissant et flexible, simplifiant considérablement les interactions de base de données. Les fonctionnalités avancées, y compris les attributs sales, les événements, les comportements et les opérations transactionnelles, améliorent ses capacités et l'adaptabilité aux scénarios complexes. Cette exploration détaillée met en évidence ses forces et montre comment tirer parti de son plein potentiel.
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!