Cet article est fourni par la colonne tutoriel thinkphp framework pour présenter et analyser la fonction de modèle virtuel nouvellement ajoutée de ThinkORM. J'espère qu'il sera utile aux amis dans le besoin !
La dernière version de ThinkORM ajoute une fonction de modèle virtuel. Cette fonction est apparue dans ThinkPHP version 3.2, mais la nouvelle version de la fonction de modèle virtuel est plus puissante.
Auparavant, si des opérations de modèle virtuel étaient nécessaires, la classe model ne pouvait pas hériter de la classe Model puis encapsuler sa propre logique métier. Bien qu'elle puisse répondre à certains besoins, elle ne pouvait pas implémenter de getters, de modificateurs et de fonctions liées au modèle, telles que. comme :
<?php namespace app\model; class User { public function getInfo() { // 业务逻辑代码 } }
La nouvelle version se concentre sur le renforcement du modèle virtuel. Les données ne peuvent être enregistrées qu'en mémoire, et les données ne peuvent être créées que par instanciation. Le modèle virtuel peut conserver la plupart des fonctions du modèle, y compris les getters et les événements de modèle. , et même les opérations d'association, d'un autre côté, sont également plus pratiques pour les tests unitaires.
Pour utiliser un modèle virtuel, il vous suffit d'introduire le trait Virtuel lors de la définition du modèle, par exemple :
<?php namespace app\model; use think\Model; use think\model\concern\Virtual; class User extends Model { use Virtual; public function getInfo() { // 业务逻辑代码 } public function getStatusAttr($value) { $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核']; return $status[$value]; } public function setNameAttr($value) { return strtolower($value); } public function blog() { return $this->hasMany('Blog'); } }
Vous n'avez pas besoin d'avoir une table utilisateur correspondante dans la base de données, mais vous pouvez toujours effectuer des opérations de données associées. Voici quelques exemples simples.
// 创建数据 $data = [ 'id' => 8, 'name' => 'Think', 'status' => 1, ]; $user = User::create($data); // 获取数据 (支持获取器) echo $user->name; // 输出 think // 修改数据 (支持修改器) $user->name = 'ThinkPHP'; // 实际数据变成 thinkphp // 保存数据到内存 并且调用模型事件 $user->save(); // 获取关联博客数据 $blog = $user->blog()->limit(3)->select(); // 删除数据(同时删除关联博客数据) $user->together(['blog'])->delete();
Étant donné que le modèle virtuel n'a pas de table de données réelle, vous ne pouvez effectuer aucune opération de requête. Le code suivant lèvera une exception :
User::find(1); // 会抛出下面的异常 // virtual model not support db query
Notez que le modèle virtuel ne prend pas en charge la fonction d'horodatage automatique (mais prend toujours en charge la fonction d'horodatage automatique). formatage du champ horaire), si le champ horaire est requis, il doit être transmis lors de l'instanciation.
Si vous définissez des getters, des modificateurs et des événements de modèle, ils sont toujours valides. Vous pouvez les tester lorsque vous avez le temps.
Recommandations associées : Les 10 derniers didacticiels vidéo thinkphp
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!