Fonctionnement de la chaîne de base de données ThinkPHP6.0
Opération de chaîne de base de données ThinkPHP6
La méthode d'opération en chaîne fournie par la base de données peut améliorer efficacement la clarté du code et l'efficacité du développement de l'accès aux données, et prend en charge toutes les
CURD
opérationsavec * La représentation du l'identifiant prend en charge plusieurs appels
opération cohérente | Fonction | Types de paramètres pris en charge |
où* | est utilisé pour la requête AND | chaîne, tableau et objet |
table | est utilisée pour définir le nom de la table de données à exploiter | String et array |
name | est utilisée pour définir le nom de la table de données à exploiter | String |
field* | Utilisé pour définir les champs à interroger (prend en charge l'exclusion de champs) | Chaîne et tableau |
ordre* | Utilisé pour trier les résultats | Chaîne et tableau |
limite | Utilisé pour limiter la requête résultats Quantité | Chaînes et nombres |
page | utilisée pour la pagination des requêtes (sera convertie pour limiter en interne) | Chaînes et nombres |
1. Requête d'expression
L'expression est la condition de l'instruction SQL
L'expression n'est pas sensible à la casse
L'expression est écrite dans où
Expression | Signification | Requête méthode |
= | est égal à | |
<> | n'est pas égal à | |
> | est supérieur à | |
> ;= | Supérieur ou égal à | |
< | inférieur à | |
<= | inférieur ou égal à | |
[PAS] COMME | Requête floue | whereLike/whereNotLike |
[NOT] BETWEEN | (not) requête d'intervalle | whereBetween/whereNotBetween |
[NOT] IN | (not) IN requête | oùDans/oùPasDans |
[NOT] NULL | Champ de requête Si (non) NULL | whereNull/whereNotNull |
where
Query
where est la méthode la plus couramment utilisée parmi les méthodes d'opération en chaîne. Elle peut effectuer des opérations de requête conditionnelle, notamment une requête ordinaire, une requête d'expression, une requête rapide, une requête par intervalle et une requête combinée
# Égal à (=)
$select = Db::table('shop_goods')->where('id','=','1')->select();
print_r($select- > toArray());
# Différent de (<>)
$select = Db::table('shop_goods')->where('id','<>' , '2')->select();
print_r($select->toArray());
# supérieur à (>)
$select = Db::table('shop_goods' )->where('id','>','3')->select();
print_r($select->toArray());
# Supérieur ou égal à (> ;=)
$select = Db::table('shop_goods')->where('id','>=','4')->select();
print_r( $select- >toArray());
# Moins de (<)
$select = Db::table('shop_goods')->where('id','<', '5') ->select();
print_r($select->toArray());
# Inférieur ou égal à (<=)
$select = Db::table ('shop_goods')-> ;where('id','<=','6')->select();
print_r($select->toArray());
# Plus où
$select + ;-& Gt; select ();
Print_r ($ select-& gt; toarray ()); );
print_r($select->toArray());
# PAS LIKE
$select = Db:: table('shop_goods')->where('title','pas comme ','%dress%')->select();print_r($select->toArray());
# BETWEEN
$select = Db::table('shop_goods') ->where('id','between','6,10')->select();print_r($select ->toArray());
# PAS ENTRE
$select = Db::table('shop_goods')->where('id','not between',[6,10]) ->select();print_r($select->toArray( ))( );
print_r($select->toArray());
# PAS DANS$select = Db::table('shop_goods')->where('id','not in',[4,7,10])->select();
print_r($select-> ;toArray());
2. Table de données
1, table et nom
# Doit compléter le nom de la base de données
$select = Db::table('shop_goods')->where('id' ,'10')->select();
print_r($select->toArray());
# La base de données n'a pas de préfixe défini
$select = Db::name('shop_goods')- >where('id','11')->select();
print_r($select->toArray());
# Préfixe de paramètre de base de données, pas d'accès au préfixe
$select = Db : :name ('list')->where('id','12')->select();
print_r($select->toArray());
2. Préfixe de la base de données
Configuration de la base de données database.php
database.php
return [
'connections' => [
'mysql' => [
// 数据库表前缀
'prefix' => Env::get('database.prefix', 'shop_'),
]
]
];
三、返回值
1、field
- return [
prefix' => Env: :get('database.prefix', 'shop_'),
]]
];
3. Valeur de retour
1.
field
field méthode main Il est utilisé pour identifier les champs à retourner ou à exploiter, qui peuvent être utilisés pour les opérations de requête et d'écriture. Toutes les requêtes. les méthodes peuvent utiliser la méthode field. Shop_goods')
-& gt; Field ('Titre, Prix, Remise comme d')
-& gt; où ('Status', 1) -& gt; - & gt ;toArray());
# Array
$select = Db::table('shop_goods')
'prix',
remise'=>'d'
-
# Ajouter, seuls ces champs peuvent être ajoutés# Plusieurs champs$data = [ 'titre' => 'Nouveau produit',
'prix' => remise' => 8,'add_time' => 1576080000
];
$insert = Db::table('shop_goods')
- > print_r($insert);
# Interrogez tous les champs, plus rapidement$select = Db::table('shop_goods') - ->field(true) // ->field('*')
- ->where('status',1)- ->select();
print_r($ select->toArray());
2.withoutField
- la méthodewithoutField exclut les champs de la table de données
Db::table('shop_goods')->withoutField('id')->select();3.fieldRaw
- la méthode fieldRaw utilise directement la fonction mysql
withoutField
withoutField 方法作用 排除数据表中的字段
Db::table('shop_goods')->fieldRaw('id,sum(price)')->select();
3、fieldRaw
fieldRaw 方法直接使用mysql函数
$select = Db::table('shop_goods')->select(); echo Db::getLastSql();
四、排序
1、order
方法用于对操作的结果排序或者优先级限制
默认正序
asc 正序
desc 倒序
$select = Db::table('shop_goods')
->field('title,price,id')
->where('status',1)
->order('price','DESC')
->order('id','DESC')
->select();
print_r($select->toArray());
2、orderRaw
方法中使用mysql函数
$select = Db::table('shop_goods')
->field('title,price,id')
->where('status',1)
->orderRaw("field(title,'price','discount','stock')")
->select();
print_r($select->toArray());
五、分页
limit
$select = Db::table('shop_goods')->fetchSql()->select(); echo $select;
< span style="font-size: 16px;"> 4. Tri
1 La méthode
order
est utilisée pour trier ou hiérarchiser les résultats de l'opérationOrdre avant par défautprint_r($select->toArray());ordre avant asc
ordre inverse desc🎜🎜🎜$select = Db:: table('shop_goods')🎜🎜 - ->field('title,price,id')🎜🎜 - ->where('status',1)🎜🎜 - ->order('price','DESC ')🎜🎜 - ->order('id','DESC') ; -& Gt; select (); 🎜🎜Print_r ($ select -& gt; toarray ()); La méthode Orderraw utilise la fonction mysql 🎜🎜🎜 $ select = db :: table ('shop_goods') 🎜🎜 -& gt; Champ ('titre, prix, identifiant') 🎜🎜 -& gt; ', 1) 🎜🎜 -& gt; orderRaw ("champ (titre, 'prix' 'remise', 'stock')")🎜🎜 ->select();🎜🎜print_r($select->toArray( ));🎜🎜 5. Paging
- 🎜La méthode
limit
est principalement utilisée pour spécifier le numéro. de requêtes et d'opérations🎜🎜🎜🎜🎜$select = Db::table('shop_goods')🎜 🎜 .; -& Gt; limite (3) -& gt; select (); Print_r ($ select -& gt; toarray ()); ) ->field('title,price,id')
- ->where('status',1)- ->order('price','DESC')
- - >limit(0, ( 'shop_goods')
- ->field('title,price,id')
- ->where('status',1)
- ->order(' price','DESC')
- >page(1,5)
- ->select();
6. Requête d'agrégation
page
méthode fonction compte compter la quantité, le paramètre est le nom du champ à compter (facultatif)
- max
Récupère la valeur maximale, le paramètre est le nom du champ à compter (obligatoire)
avg | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sum | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Paramètres | Description |
list_rows | Quantité par page |
page | Page actuelle |
chemin | chemin d'url |
requête | paramètres supplémentaires d'url |
fragment | ancre d'url |
var_page | variable de pagination |
code du contrôleur
index de fonction publique(){
$title = 'Mall';
$login = 'Ouyang Ke';
# Menu de gauche
$menu = Db::table('shop_menu' ) ->where('fid',0)->select();
$left = $menu->toArray();
foreach($left as &$left_v){
$left_v[ ' lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])->select();
}
# Liste de droite
$ 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;
# thinkphp est livré avec la pagination
$list = Db::table('shop_goods' )
( ;
$right_v['cat'] = Db::table('shop_cat')-&g t;where('id',$right_v['cat'])->value( 'nom'); } Vue :: attribuer ([ 'titre' = & gt; $ table, 'login' = & gt; $ login, 'gauche' = & gt; $ gauche; 'droite' = & gt; $ droite;'liste' => ();}
afficher le code
<div>{$paginate|raw}</div>
11. Débogage SQL
getLastSql
Sortie de la dernière instruction SQL exécutéegetLastSql
输出上次执行的sql语句getLastSql
方法只能获取最后执行的 SQL 记录
// 启动事务 Db::startTrans(); $data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000]; $insert = Db::table('shop_goods')->insert($data); if(empty($insert)){ // 回滚事务 Db::rollback(); }else{ // 提交事务 Db::commit(); }
fetchSql
La méthode
getLastSql
ne peut obtenir que le dernier enregistrement SQL exécutéDb::transaction(function () { $data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000]; $insert = Db::table('shop_goods')->insert($data); });
fetchSql
renvoie directement le SQL actuel sans exécuter
$select = Db::table('shop_goods') ->field('title,price,id') ->where('status',1) ->order('price','DESC') ->select(); if($select->isEmpty()){ echo '未查询到数据'; }else{ print_r($select->toArray()); }12. Configurer dynamiquement la base de données
répertoire de configuration fichier database.php
return ['connexions' . 'nom d'hôte' " nom d'utilisateur' ' => Port
'params ' => [], 'préfixe '= & Gt; env :: get ('database.prefix','shop_'), // méthode de déploiement de la base de données : 0 concentré (serveur unique), 1 distribué (serveur principal) ' déployer '= >
=> 1,
Numéro de série '' slave_no '= & gt;',
// si le champ est strictement vérifié si le champ existe
' field_strict '= & gt; nécessite une ligne de poids déconnectée
' break_reconnect '= & gt; false,
// 监听SQL
'trigger_sql' => true,
//开启字段缓存
'fields_cache' => false,
// 字段缓存路径
'schema_cache_path' => app()->getRuntimePath() 'schema' .
CREATE TABLE `shop_user` ( `uid` int( 10) non signé NOT NULL AUTO_INCREMENT COMMENT 'ID utilisateur', `account` varchar(50) NOT NULL COMMENT 'Compte', `password` char(32) NOT NULL COMMENT 'Mot de passe',`name` varchar (50) COMMENTAIRE NON NULL 'Nom', `status` tinyint(1) non signé NON NULL PAR DÉFAUT '1' COMMENTAIRE 'Statut 1 sur 2 désactivé', `add_time` int(10) non signé NON NULL COMMENTAIRE 'Ajouter time', PRIMARY KEY (`uid`)) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='Backend Administrator';
connect
Méthode de configuration dynamique de la connexion à la base de données informations
Db::connect('ouyangke')->table('shop_user')->select();La méthode
connect
est requise Appelée au début de la requête, et doit être suivi de la méthode de requête, sinon certaines requêtes peuvent échouer ou la connexion à la base de données par défaut peut toujours être utilisée13.Opération en chaîne WHRER (pas couramment utilisé)
Identique à la fonction d'expression de requête, ThinkPHP fournit les méthodes de requête rapides suivantes
Fonctionnement cohérent Fonction Types de paramètres pris en charge whereOr* pour la requête OR Chaîne, tableau et objet "whereNotLike*" String whereLike* Requête floue Chaîne de caractères string whereIn* IN requête string whereNotIn* Pas dans la requête IN string whereNull* Demander si le champ est NULL String where NotNull* quer y champ N'est-il pas NULL String whereExists* EXISTE requête whereNotExists* Pas dans la requête EXISTS String whereBetweenTime* Comparaison d'intervalle de temps String whereTime* Requête rapide pour l'heure et la date String whereExp* Requête d'expression, prend en charge la syntaxe SQL String whereFindInSet* FIND_IN_SET query String whereRaw* est utilisé pour la requête directe et le fonctionnement des conditions de chaîne Brochettes14. Autres opérations en chaîne (peu courantes)
Opérations continues Fonction Types de paramètres pris en charge alias est utilisé pour définir des alias pour la table de données actuelle Chaîne strict est utilisé pour définir s'il faut détecter strictement si le nom du champ existe Valeur booléenne group est utilisé pour la prise en charge de groupe pour les requêtes chaîne having est utilisée pour prendre en charge requêtes String join* Pour rejoindre la prise en charge des requêtes Chaînes et tableaux union* Pour la prise en charge des unions pour les requêtes Chaînes, tableaux et objets distinct distinct prise en charge des requêtes booléen verrouillage mécanisme de verrouillage pour la base de données booléen cache pour le cache des requêtes prend en charge plusieurs paramètres commentaire pour les commentaires SQL String force est utilisé pour l'indexation forcée de l'ensemble de données chaîne partition est utilisée pour définir les informations de partition chaîne de tableau failException est utilisée pour définir si aucune donnée n'est requise ried ou non levée Exception Valeur booléenne séquence est utilisée pour définir le nom de la séquence d'incrémentation automatique chaîne replace est utilisée pour définir la méthode REPLACE pour écrire Valeur booléenne extra Utiliser pour définir des règles de requête supplémentaires String duplicate Utilisé pour définir les informations DUPLCATE Chaîne de tableau procédure Utilisée pour définir si la requête actuelle est une requête de procédure stockée Valeur booléenne master est utilisée pour configurer le serveur maître pour lire les données Valeur booléenne view* est utilisée pour la requête de vue String, array 15. Opération de transaction
rrreee
Le moteur
InnoDB
prend en charge le traitement des transactions,MyISAM
ne prend pas en charge le traitement des transactionsInnoDB
引擎支持事务处理,MyISAM
不支持事务处理rrreee
transaction
方法操作数据库事务,当闭包中的代码发生异常会自动回滚十六、数据集
rrreee🎜🎜< La méthode code>transaction exploite les transactions de la base de données. Lorsqu'une exception se produit dans le code lors de la fermeture, elle annulera automatiquement🎜rrreee🎜16. est interrogé via select L'objet ensemble de données 🎜🎜🎜L'objet ensemble de données renvoyé est
数据库通过select查询,得到的数据集对象
返回的数据集对象是
thinkCollection
thinkCollection
, qui fournit la même utilisation que les tableaux et encapsule également certaines méthodes supplémentaires🎜rrreee
Numéro Méthode Description 1 isEmpty Est-il vide 2 toArray Convertir en tableau 3 tous tous Données 4 fusionner Fusionner d'autres données 5 diff Comparer les tableaux et renvoyer la différence 6 flip Échange de clés et de valeurs dans les données 7 intersect Comparer les tableaux et renvoyer l'intersection 8 keys Renvoyer tous les noms de clés dans les données 9 pop Supprimez le dernier élément des données 10 shift Supprimer le premier élément des données 11 unshift Insérer un élément au début des données 12 push Insérer un élément à la fin 13 réduire En utilisant la fonction de personnalisation de l'utilisateur, renvoie sous forme de chaîne Array 14 reverse Données réorganisées dans l'ordre inverse 15 chunk Les données sont séparées en plusieurs blocs de données 16 chacun Exécuter des rappels pour chaque élément des données 17 filtre Utilisez la fonction de rappel pour filtrer les éléments dans les données 18 colonne Renvoie la colonne spécifiée dans les données 19 trier Trier les données 20 ordre Spécifier le tri des champs 21 shuffle Mélangez les données 22 tranchez Interceptez une partie des données 23 map Utilisez la fonction de rappel pour traiter les éléments du tableau dans 24 where Filtrer les éléments du tableau en fonction des conditions du champ 25 whereNotLike Like élément de filtre de requête 26 whereNotLike Pas comme l'élément de filtre 27 whereIn IN interroge et filtre les éléments du tableau 28 whereNotIn Not IN interroge et filtre les éléments du tableau 29 whereBetween Between interroge et filtre les éléments du tableau array 30 whereNotBetween Not Between filtre les éléments du tableau Préparation : effectuez une requête d'ensemble de données dans le modèle et tous les objets de l'ensemble de données seront renvoyés, mais la méthode utilisée est
thinkmodelCollection类
(héritée de thinkCollection), mais l'utilisation est cohérente.