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èle | Préfixe de base de données |
Cat | shop_cat |
Goods | shop_goods |
CommandeUtilisateur | shop_user_order |
Paramètre du préfixe de table : prefix
dans le fichier config/database.php
config/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
- Étape 1 : Créez un répertoire au même niveau que le contrôleur, nom du répertoire :
Etape 2 : Créez
🎜2. Comment appeler leGoods.php dans
model
code> file2. 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 🎜🎜 }🎜🎜}🎜
model
dans lecontroller
. 🎜🎜🎜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🎜🎜3select
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éesupdate
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'utiliserContrôleur code>exé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. 🎜
Attribut Description 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
'remise',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 = [
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、搜索器
Le nom du champ est la conversion en chameau du champ de la table de données
搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式
命名规则:
search + 字段名 + Attr
class Goods extends Model{ public function index(){ $find->status;Règles de dénomination :, ,,,,,,,,, ,,,,,,,, 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
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.Vous devez utiliser la méthode
Si vous voulez juger si l'ensemble de données est vide, vous ne pouvez pas utiliser directement
empty
pour jugerempty
判断必须使用数据集对象的
isEmpty
isEmpty
de l'ensemble de données objet à jugerclass Goods extends Model{ public function index(){ $select = Goods::where('title','1')->select(); if( vide($select)){ echo 111;modèle d'application d'espace de noms;utilisez thinkModel;utilisez thinkfacadeDb;5. La liste de droite est modifiée en exemple de modèlecode de modèle
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
<td>{$right_v.add_time}</td>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>
六、模型事件..只在调用模型的方法生效,使用查询构造器操作是无效的
Number Event Description Nom de la méthode d'événement 1 after_read After query onAfterRead 2 before_insert Ajouter avant onBeforeInsert 3 after_insert AfterInsert onAfterInsert 4 before_update BeforeUpdate onBeforeUpdate 5 after_update Après la mise à jour onAfterUpdate 6 before_write avant d'écrire onBeforeWrite 7 after_write après avoir écrit onAfterWrite 8 before_restore beforerestore onBeforeRestore 11 after_restore AfterRestore onAfterRestore 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; } }