Modèle ThinkPHP6.0



Modèle ThinkPHP6

  • Veuillez vous assurer d'avoir configuré les informations de connexion à la base de données dans le fichier de configuration de la base de données

  • Le modèle correspondra automatiquement à la table de données. La règle de dénomination de la classe de modèle est la. nom de la table de données moins le préfixe de la table. , en utilisant la casse camel, et la première lettre est en majuscule

  • Les noms de table de données correspondant automatiquement au modèle suivent la spécification en minuscules + trait de soulignement. Si le nom de votre table est en majuscule, vous. doit définir l'attribut de table du modèle.

1. Créer un modèle

Nom du modèlePréfixe de base de données
Catshop_cat
Goods shop_goods
CommandeUtilisateur shop_user_order

Paramètre du préfixe de table : prefix dans le fichier config/database.phpconfig/database.php 文件里 prefix

  • 第一步:创建一个跟控制器平级的目录,目录名:model

  • 第二步:在 model 创建 Goods.php 文件

二、模型操作

在模型中除了可以调用数据库类的方法之外(换句话说,数据库的所有查询构造器方法模型中都可以支持),可以定义自己的方法,所以也可以把模型看成是数据库的增强版

  • 模型文件里的自定义方法,不要和 thinkphp 方法一样名称

  • 模型里的 Goods:: 也可以用 static:: 关键词

  • 链式操作,都可以在模型里使用

1、find查询数据

find 获取单条数据,返回的是当前模型的对象实例

namespace appmodel;

use thinkModel;

class Goods extends Model{

    public function find(){

        $find = Goods::find(6);

        $find = Goods::where('id',7)->find();

        return $find;

    }

}

2、controller怎么调用model

namespace appcontroller;

use appmodelGoods;

class Index{

    public function index(){

        $db = new Goods();

        $index = $db->find();

        print_r($index);

    }

}

find(6) 查询失败,是因为数据库主键名称不是 id

3、select查询数据

select 获取多条数据,返回的是当前模型的对象实例

public function select(){

    $select = Goods::select();

    $select = Goods::select(6);

    $select = Goods::where('id','>',7)->select();

    return $select;

}

4、数据转换

toArray方法将当前的模型实例输出为数组

public function select(){

    $select = Goods::select();

    $select = Goods::select(6);

    $select = Goods::where('id','>',7)->select();

    return $select->toArray();

}

5、增加数据

  • create

    • Étape 1 : Créez un répertoire au même niveau que le contrôleur, nom du répertoire : model
  • Etape 2 : Créez Goods.phpmodel code> file

    2. Opération du modèle

    En plus d'appeler les méthodes de la classe de base de données dans le modèle (en d'autres termes, toutes les méthodes du constructeur de requêtes de la base de données peuvent être prises en charge dans le modèle) , vous pouvez définir vos propres méthodes, vous pouvez donc également considérer le modèle comme une version améliorée de la base de données

    • Les méthodes personnalisées dans le fichier modèle ne devrait pas être le même que la méthode thinkphp Name🎜🎜
    • 🎜 Goods:: dans le modèle peut également être utilisé static:: Keywords🎜🎜
    • 🎜 les opérations en chaîne peuvent être utilisées dans le modèle. Utilisez 🎜🎜🎜🎜1, find pour interroger les données 🎜🎜find pour obtenir une seule donnée. Ce qui est renvoyé est l'instance d'objet du modèle actuel 🎜🎜. 🎜namespace appmodel;🎜🎜use thinkModel;🎜🎜class Goods extends Model{ 🎜🎜 public function find(){🎜🎜 $find = Goods::find(6);🎜🎜 $find = Goods::where('id' ,7)->find();🎜🎜 return $find 🎜🎜 }🎜🎜}🎜
    🎜2. Comment appeler le model dans le controller. 🎜🎜🎜contrôleur d'application d'espace de noms ;🎜🎜utiliser appmodelGoods ;🎜🎜index de classe{🎜🎜 index de fonction publique(){🎜🎜                                                   en utilisant   en utilisant   en utilisant           en utilisant en utilisant ' ' ' tout au long de l'utilisation de ' en utilisant ‐                  dehors dehors dehors à travers '' ' s ' ‐ ‐ ‐ ‐ ‐‐‐‐w between La requête find(6) a échoué car le nom de la clé primaire de la base de données n'est pas id🎜🎜3 select Les données de la requête🎜🎜select obtiennent plusieurs éléments de. data et renvoie l'instance d'objet du modèle actuel🎜🎜🎜public function select (){🎜🎜 $select = Goods::select();🎜🎜 $select = Goods::select(6);🎜🎜 $select = Goods ::where('id','>',7)- >select();🎜🎜 Renvoie $select;🎜🎜}🎜🎜4. Conversion de données🎜🎜toArray La méthode génère l'instance de modèle actuelle sous forme de tableau🎜🎜🎜public function select (){🎜🎜 $select = Goods::select();🎜🎜 $select = Goods::select(6);🎜🎜 $select = Goods ::where('id','>',7)- >select();🎜🎜 return $select->toArray();🎜🎜}🎜🎜Ajouter des données🎜
    • 🎜create La méthode statique ajoute des données et renvoie l'instance d'objet du modèle actuel🎜🎜🎜🎜🎜public function create(){🎜 🎜 $create = Goods::create([🎜🎜 "cat" = > 3,🎜'Titre' = & gt; 'nouveau produit',

      'prix' = & gt; '59 .99',

      ' add_time '= & gt; time ()

      ]); l'ID auto-croissant

      Return $create;

      }

      Le principe des meilleures pratiques pour ajouter des données : utilisez la méthode create pour ajouter des données et utilisez saveAll pour ajouter des données par lots.

      6. Modifier les données

      update La méthode statique modifie les données et renvoie l'instance d'objet du modèle actuel
      • save Après la prise sur les données, modifiez le champ pour mettre à jour les données. Cette méthode est le meilleur moyen de mettre à jourupdate 静态方法修改数据,返回的是当前模型的对象实例

      • save 在取出数据后,更改字段更新数据。这种方式是最佳的更新方式

      namespace appmodel;

      use thinkModel;

      class Goods extends Model{

          public function update(){

              # 更新方式1

              $update = Goods::update(

                  ['price'=>'99.99'],

                  ['id'=>22]

              );

              return $update;

              # 更新方式2

              $user = Goods::find(23);

              $user->price     = '102.99';

              $save = $user->save();

              return $save;

          }

      }

      7、删除数据

      • delete 静态方法删除数据,返回的是当前模型的对象实例

      • destroy 根据主键删除

      public function delete(){

          # 删除方法1

          $delete = Goods::where('id',3)->delete();

          # 删除方法2

          $delete = User::destroy(4);

          return $delete;

      }

      TP模型如果只能增删查改,不如在 Controller

    namespace appmodel;

    utilisez thinkModel;

    class Goods extends Model{🎜🎜 public function update(){🎜🎜 #Méthode de mise à jour 2 return $update;🎜🎜          # Méthode de mise à jour 2🎜🎜           $user = Goods::find(23);🎜🎜                                              use with using '         dehors de part en part en utilisant ' ' ' à travers ' s ' à travers ‐ ‐ ‐ ‐‐‐​ ​ ​ ​                              à    à travers ‐ ‐ ‐ ‐‐ ‐‐‐‐ ‐ ‐ 🎜🎜 }🎜🎜}🎜🎜🎜7. >La méthode statique supprime les données et renvoie l'instance d'objet du modèle actuel🎜
  • 🎜🎜destroy Supprimer selon la clé primaire🎜
🎜public function delete(){🎜🎜 # Méthode de suppression 1🎜🎜 $delete = Goods::where('id',3)->delete( );🎜🎜 #Méthode de suppression 2🎜🎜 $delete = User::destroy(4);🎜🎜 return $delete ;🎜🎜}🎜🎜🎜Si le modèle TP ne peut être qu'ajouté, supprimé, vérifié et modifié, il est préférable d'utiliser Contrôleurexécuté. Le modèle TP possède de nombreuses fonctionnalités, qui sont présentées une par une ci-dessous🎜🎜3 Paramètres du modèle🎜🎜Afin de mieux s'adapter à la base de données, le modèle peut définir à l'avance les propriétés de la base de données correspondantes et configurer une table de données dans un seul fichier. 🎜
AttributDescription
nom Nom du modèle (équivalent au nom de la table sans le suffixe et le suffixe de la table de données, la valeur par défaut est le nom de la classe de modèle actuelle)
table Nom de la table de données (Obtention automatique par défaut)
pk Nom de la clé primaire (par défaut est l'identifiant)
schéma Champs et types de la table de données correspondants du modèle
type Champs et types que le modèle doit être automatiquement converti
désutilisation Champs abandonnés de la table de données (tableau)

1. nom et table

Lorsque votre table de données n'a pas de préfixe, il n'y a aucune différence dans la définition des attributs de nom et de table. Vous pouvez définir l'un ou l'autre

class Goods extends Model{

protected $name = 'Goods. ';

protected $table = 'shop_goods';

public function select(){

$select = Goods::select();

return $select->toArray();

}

}

2. pk Changez le nom de la clé primaire

model. La clé primaire par défaut est id

// Vous pouvez changer la clé primaire en shop_id Try

ALTER TABLE `ouyangke`.`shop_goods`

CHANGE. COLUMN `id` `shop_id ` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Product ID' EN PREMIER,

DÉPOSER LA CLÉ PRIMAIRE,

AJOUTER LA CLÉ PRIMAIRE (`shop_id`) À L'AIDE DE BTREE ;

class Goods étend le modèle{

​ protected $name = 'Goods ';

protected $table = 'shop_goods';

protected $pk = 'shop_id';

public function find($id=1){

$find = Goods::find ($id);

return $find->toArray();

}

}

3 schema Définissez les champs et les types de table de données correspondant au modèle

  • Il sera automatiquement obtenu par. par défaut (y compris les types de champs), mais l'acquisition automatique entraînera une augmentation. Un attribut de requête

  • une fois défini, le type de champ de la table de données complète doit être défini

  • Le type est défini en fonction du type de données php. c'est un type json, il peut être directement défini comme json

class Goods extends Model {

protected $name = 'Goods';

protected $table = 'shop_goods';

protected $pk = ' shop_id';

protected $schema = [

'shop_id' => 'int',

                                                                    utiliser using ' ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ 'cat' =>,

                                                         out off out out   ‐ ‐ ‐‐ ‐ to 'stock' => 'int',

'status' => 'int',

'add_time' => 'int'

];

# Définir le type d'un champ qui doit être automatiquement converti, vous pouvez utiliser l'attribut type

protected $type = [

] 'shop_id' => 'int'

];

public function select(){

$select = Marchandises ::select();

                                                                                         Return $select->toArray();

protected $pk = 'shop_id';

protected $disuse = [

'remise',

disuse 'stock'

] ;

public function select(){

$select = Goods::select();

                                                                                                                                                                                                                               ‐ 's ‐ ‐ ‐ ‐ ‐ing return $select->toArray();
PropriétéDescription
suffixe Suffixe de la table de données (la valeur par défaut est vide)
connexion Connexion à la base de données (lecture par défaut de la configuration de la base de données)
query Requêtes utilisées par le modèle Nom de la classe
champ Liste de champs (tableau) que le modèle autorise à écrire
strict Le champ est-il sensible à la casse (la valeur par défaut est true)
lecture seule Champ en lecture seule
json Définissez le champ sur les données JSON
jsonType Définissez le type de champ JSON
jsonAssoc Définissez le tableau de retour des données JSON
autoWriteTimest amp Écrit automatiquement l'horodatage créé et mis à jour field (désactivé par défaut)
createTime Créer un champ d'horodatage
updateTime Mettre à jour le champ d'horodatage
deleteTime est utilisé pour définir votre champ de marqueur de suppression logicielle
def aultSoftDelete Définition Valeur par défaut pour les champs supprimés de manière logicielle

4. Principales fonctions du modèle

1. Getter

  • La fonction du getter est de traiter automatiquement les données (originales) de l'instance du modèle

  • Règles de dénomination : get + nom du champ + Attr< /code>get + 字段名 + Attr

  • 字段名是数据表字段的驼峰转换

class Goods extends Model{

    public function index(){

        $find = Goods::find(10);

        echo $find->status;

        return $find->toArray();

    }

    public function getStatusAttr($v){

        $status = [

            1=>'开启',

            2=>'关闭'

        ];

        return $status[$v];

    }

}

2、修改器

  • 修改器的主要作用是对模型设置的数据对象值进行处理

  • 命名规则: set + 字段名 + Attr

class Goods extends Model{

    public function index(){

        $create = Goods::create([

            'cat' =>  3.33,

            'title' =>  '新商品',

            'price' =>  '59.99',

            'add_time' => time()

        ]);

        return $create;

    }

    public function setCatAttr($v,$all){

        // $all 全部参数

        return (int)$v;

    }

}

3、搜索器

  • 搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式

  • 命名规则: search + 字段名 + Attr

Le nom du champ est la conversion en chameau du champ de la table de données

class Goods extends Model{

public function index(){

                                                                                         $find->status;

                                                                                                         , ,,,,,,,,, ,,,,,,,, Allumer',

2 = & gt; }

2, le rôle principal du modificateur

Le modificateur est l'objet de données défini par les paramètres du modèle. Les valeurs sont traitées

Règles de dénomination : set + nom du champ + Attr<. /code>

🎜🎜🎜class Goods étend le modèle{🎜🎜 public function index(){🎜🎜 $create = Goods::create ([🎜🎜                                                                                                                                                                                                          'add_time' => time()🎜🎜 ]);🎜🎜                                                                                                                                                                                                                   revenir $create; 🎜}🎜🎜 🎜3. Chercheur🎜🎜🎜🎜La fonction du chercheur est d'encapsuler l'expression de la condition de requête du champ (ou de l'identifiant de recherche)🎜🎜🎜🎜Règle de dénomination : recherche + nom du champ + Attr🎜🎜 🎜🎜🎜class Goods étend le modèle{🎜🎜 public function index(){🎜🎜 $select = Goods::withSearch(['title'],[🎜🎜 ]) -> ;select() ;🎜🎜                                                                                            ,,,                            ,,,,,,,,,; $v '%');🎜🎜 }🎜🎜}🎜🎜🎜4.
  • Si vous voulez juger si l'ensemble de données est vide, vous ne pouvez pas utiliser directement empty pour juger empty 判断

  • 必须使用数据集对象的 isEmpty

Vous devez utiliser la méthode isEmpty de l'ensemble de données objet à juger

class Goods extends Model{

public function index(){

$select = Goods::where('title','1')->select();

if( vide($select)){

echo 111;

                                                                                            

5. La liste de droite est modifiée en exemple de modèle

code de modèle

modèle d'application d'espace de noms;

utilisez thinkModel;

utilisez thinkfacadeDb;

class Goods étend le modèle{

protected $name = 'Goods';

protected $table = 'shop_goods';

public function get_all($where,$order='add_time DESC',$p=1,$ total=10){

$count = Goods::where($where)->count();

$list = Goods::where ($where)

                                                                                                                                                                                                                                                        

          if($list->isEmpty( )){

                                                                                                                                                     return null; 'cat'] = Db::table(' shop_cat')->where('id',$data_v['cat'])->value('name');

      }

            $arr = [

                'count' => ceil($ count/$total),

                                                                                                           $data $status = [

1=> ;'On',

                                                                             'Fermer '

Date de retour('Y-m-d ',$v);

}

}

code du contrôleur

public function index(){

    $title = '商城';

    $login = '欧阳克';

    # 左侧菜单

    $menu = Db::table('shop_menu')-> où('fid',0)->select();

    $left = [];

    foreach($menu as $menu_k=>$menu_v){

        $left[$menu_k] = $menu_v ;

        $left[$menu_k]['lists'] = Db::table('shop_menu')->where('fid',$menu_v['id'])->select();

}

    # 右侧列表

    $param = Request::param();

    if(isset($param['status']) && $param['status'] == 1){

        $where ['status'] = 1;

    }else if(isset($param['status']) && $param['status'] == 2){

        $where['status'] = 2;

    }else{

        $where = true;

    }

    $p = isset($param['p']) ? $param['p'] : 1;


    $db = new Goods();

    $order = [

        'add_time DESC',

        'id DESC'

    ];

    $ c'est vrai = $db->get_all($where,$order,$p,5);

    View::assign([

        'title'  => $title,

        'login' => $login,

        'gauche' => $left,

        'right' => $right['data'],

        'count' => $right['count'],

        'p' => ; $p,

        'statut' => isset($param['status']) ?

html代码

<td>{$right_v.status}</td>

<td>{$right_v.add_time}</td>

六、模型事件

..只在调用模型的方法生效,使用查询构造器操作是无效的

8 before_restore beforerestoreonBeforeRestore11 after_restore AfterRestoreonAfterRestore
namespace app\model;
use think\Model;
class Goods extends Model{
    public function one_update(){
        $update = Goods::update(
            ['price'=>'99.99'],
            ['id'=>22]
        );
        return $update;
    }
    # 执行更新操作,就会之下onBeforeUpdate方法
    public static function onBeforeUpdate($goods){
        print_r($goods->price);
        return true;
    }
}
NumberEventDescriptionNom de la méthode d'événement
1after_readAfter query onAfterRead
2 before_insert Ajouter avant onBeforeInsert
3 after_insert AfterInsertonAfterInsert
4before_update BeforeUpdateonBeforeUpdate
5 after_update Après la mise à jouronAfterUpdate
6 before_write avant d'écrireonBeforeWrite
7 after_write après avoir écritonAfterWrite