Maison > cadre php > PensezPHP > Analysez la fonction de modèle virtuel nouvellement ajoutée de ThinkORM

Analysez la fonction de modèle virtuel nouvellement ajoutée de ThinkORM

Libérer: 2021-08-09 09:16:42
avant
2438 Les gens l'ont consulté

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()
    {
        // 业务逻辑代码
    }
}
Copier après la connexion

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=>&#39;删除&#39;,0=>&#39;禁用&#39;,1=>&#39;正常&#39;,2=>&#39;待审核&#39;];
        return $status[$value];
    }
    public function setNameAttr($value)
    {
        return strtolower($value);
    }
    public function blog()
    {
        return $this->hasMany(&#39;Blog&#39;);
    }
}
Copier après la connexion

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 = [
    &#39;id&#39;      =>    8,
    &#39;name&#39;    =>    &#39;Think&#39;,
    &#39;status&#39;  =>    1,
];
$user = User::create($data);
// 获取数据 (支持获取器)
echo $user->name; // 输出 think
// 修改数据 (支持修改器)
$user->name = &#39;ThinkPHP&#39;; // 实际数据变成 thinkphp
// 保存数据到内存 并且调用模型事件
$user->save();
// 获取关联博客数据
$blog = $user->blog()->limit(3)->select();
// 删除数据(同时删除关联博客数据)
$user->together([&#39;blog&#39;])->delete();
Copier après la connexion

É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
Copier après la connexion

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!

Étiquettes associées:
source:thinkphp
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal