ThinkPHP6.0-Datenbankkettenbetrieb
ThinkPHP6 Datenbankkettenbetrieb
Die von der Datenbank bereitgestellte Kettenbetriebsmethode kann die Codeklarheit und Entwicklungseffizienz des Datenzugriffs effektiv verbessern und unterstützt alle
CURD
VorgängeMit * markiert, unterstützt es mehrere Anrufe
连贯操作 | 作用 | 支持的参数类型 |
where* | 用于AND查询 | 字符串、数组和对象 |
table | 用于定义要操作的数据表名称 | 字符串和数组 |
name | 用于定义要操作的数据表名称 | 字符串 |
field* | 用于定义要查询的字段(支持字段排除) | 字符串和数组 |
order* | 用于对结果排序 | 字符串和数组 |
limit | 用于限制查询结果数量 | 字符串和数字 |
page | 用于查询分页(内部会转换成limit) | 字符串和数字 |
1. Ausdrucksabfrage
Der Ausdruck ist die Bedingung der SQL-Anweisung
Ausdrücke unterscheiden nicht zwischen Groß- und Kleinschreibung
Ausdrücke werden in der Schreibweise geschrieben, wo
表达式 | 含义 | 查询方法 |
= | 等于 | |
<> | 不等于 | |
> | 大于 | |
>= | 大于等于 | |
< | 小于 | |
<= | 小于等于 | |
[NOT] LIKE | 模糊查询 | whereLike/whereNotLike |
[NOT] BETWEEN | (不在)区间查询 | whereBetween/whereNotBetween |
[NOT] IN | (不在)IN 查询 | whereIn/whereNotIn |
[NOT] NULL | 查询字段是否(不)是NULL | whereNull/whereNotNull |
where
Abfrage
wobei die Methode die am häufigsten verwendete Methode in der Kettenoperationsmethode ist, die normale Abfragen, Ausdrucksabfragen, Schnellabfragen, Intervallabfragen und Kombinationen abschließen kann Bedingte Abfrageoperationen einschließlich Abfragen
# Gleich (=)
$select = Db::table('shop_goods')->where('id','=','1')->select();
print_r($select->toArray()) ;
# Ungleich (<>)
$select = Db::table('shop_goods')->where('id','<>','2')->select();
print_r($select->toArray ());
# Größer als (>)
$select = Db::table('shop_goods')->where('id','>','3')->select();
print_r($select->toArray() );
# Größer als oder gleich (>=)
$select = Db::table('shop_goods')->where('id','>=','4')->select();
print_r($select->toArray( ));
# Kleiner als (<)
$select = Db::table('shop_goods')->where('id','<','5')->select();
print_r($select->toArray() );
# Kleiner oder gleich (<=)
$select = Db::table('shop_goods')->where('id','<=','6')->select();
print_r($select->toArray( ));
# Mehrere wo
$select = Db::table('shop_goods')
wo ->where('id','<','8')
->select();
print_r($select->toArray());
# LIKE$select = Db::table('shop_goods')->where('title','like','%dress%')->select();
print_r($select->toArray( ));
# NICHT LIKE$select = Db::table('shop_goods')->where('title','not like','%dress%')->select();
print_r($select->toArray());
# ZWISCHEN$select = Db::table('shop_goods')->where('id','between','6,10')->select();
print_r($select->toArray( ));
# NICHT ZWISCHEN$select = Db::table('shop_goods')->where('id','not between',[6,10])->select();
print_r($select->toArray());
# IN$select = Db::table('shop_goods')->where('id','in','4,7,10')->select();
print_r($select-> toArray());
# NOT IN$select = Db::table('shop_goods')->where('id','not in',[4,7,10])->select();
print_r($select->toArray());
2 🎜>
1. Tabelle und Name# Der vollständige Datenbankname muss $select = Db::table('shop_goods')->where('id','10')->select(); lauten print_r( $select->toArray());# Für die Datenbank ist kein Präfix festgelegt $select->toArray());# Datenbankeinstellungspräfix, kein Präfixzugriff $select = Db::name('list')->where('id','12')->select();print_r($select->toArray());return [
2. Datenbankpräfix
Datenbankkonfiguration
database.php
'connections' => [
'mysql' => [ / Das Datenbanktabellenpräfix'prefix' = & gt; get ('database.prefix', 'shop _'),
]
]];
3. Rückgabewert
1,
Feld Die Hauptfunktion der Methode besteht darin, die zurückzugebenden oder zu bedienenden Felder zu identifizieren, die für Abfrage- und Schreibvorgänge verwendet werden können field
- Alle Abfragemethoden können die Feldmethode
< verwenden 🎜>
- # String$select = Db::table('shop_goods')
->where('status',1)
->select();
print_r($select->toArray());
# Array$select = Db::table('shop_goods')
'discount'=>'d'])
->where('status',1)
->select();
print_r($select->toArray());
# Hinzufügen, nur diese Felder können hinzugefügt werden # Mehrere Felder$data = [ 'title' => 'Neues Produkt', 'Preis' => 50,
'Rabatt' => 8,' add_time' => 1576080000
];
$insert = Db::table('shop_goods')
> ->field('add_time') ->insert($data);print_r($insert);# Alle Felder schneller abfragen
$select = Db::table('shop_goods')
('*')
->where('status',1) ->select();print_r($select->toArray());2,
withoutField-Methodenfunktion Felder in der Datentabelle ausschließen
Db::table('shop_goods')->withoutField('id')->select();
3, withoutField
fieldRaw Methode: MySQL-Funktion direkt verwenden
Db::table('shop_goods')->fieldRaw('id,sum(price)')->select();
fieldRaw
4. Sortieren
1.
Methode wird verwendet, um die Ergebnisse von Vorgängen zu sortieren oder zu priorisieren
Standardmäßige positive Reihenfolge
aufsteigend Vorwärtsbestellungorder
- desc Rückwärtsbestellung
$select = Db::table('shop_goods')
->field('title,price,id')->where('status',1)
->order('price','DESC')
->order('id','DESC') ->select();print_r($select->toArray());->where('status',1)2. Verwenden Sie die MySQL-Funktion
im
Methode$select = Db::table('shop_goods')
->field('title,price,id')
orderRaw
->orderRaw("field(title,'price','discount','stock')")
->select();print_r($select->toArray());$select = Db::table('shop_goods')5. Paging
-Methode wird hauptsächlich verwendet, um die Anzahl der Abfragen und Vorgänge anzugeben
- ->field('title,price,id')
limit
->where('status',1) ->order('price','DESC')
$select = Db::table('shop_goods ')
- -Methode wird hauptsächlich für Paging-Abfragen verwendet
page
$select = Db::table('shop_goods')
->field('title,price,id') ->where('status',1) ->order('price','DESC') ->select();print_r($select->toArray());Wenn in der Aggregationsmethode keine Daten vorhanden sind, ist der Standardwert 0. Die Aggregationsabfrage kann mit anderen Abfragebedingungen abgeglichen werden6 , Aggregationsabfrage
// Zähle die Zahl, der Parameter ist der zu zählende Feldname (optional)
$select = Db::table('shop_goods')->count();
print_r($select);
// Den Maximalwert abrufen, Parameter Ist der zu zählende Feldname (erforderlich)
$select = Db::table('shop_goods')->max('id');
print_r($select);
// Holen Sie sich die Mindestwert, der Parameter ist der zu zählende Feldname (erforderlich)
$select = Db::table('shop_goods')->min('id');
print_r($select);
// Holen Sie sich die Durchschnittswert, der Parameter ist der zu zählende Feldname (erforderlich)
$select = Db::table('shop_goods')->avg('id');
print_r($select);
// Holen Sie sich die Gesamtzahl, der Parameter ist der zu zählende Feldname (erforderlich)
$select = Db::table('shop_goods')->sum('id');
print_r($select);
7. Such- und Sortierbeispiele
Controller-Code
öffentliche Funktion index(){
$title = 'Mall';
$login = 'Ouyang Ke';
# Linkes Menü
$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();
}
# Rechte Liste
$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{
$wo = true;
}
$list = Db::table('shop_goods')
->where($where)
->order('add_time DESC')
- ->order('id DESC')
- ->select();
$right = $list->toArray();
foreach($right as &$right_v){
$right_v['cat'] = Db::table('shop_cat')->where('id',$right_v['cat'])->value('name');
}
Ansicht ::assign([
'title' => $title,
'login' => $login,
'left' => $left,
'right' => $right,
'status' => isset($param['status']) ? $param['status'] : null
]);
return View::fetch();
}
view代码
<form class="layui-form" method="post">
<div class="layui-form-item" style="margin-top:10px;">
<div class="layui -input-inline">
<select name="status">
<option value="0" {if $status==0}selected{/if}>全部</option>
< Optionswert="1" {if $status==1}selected{/if}>开启</option>
<option value="2" {if $status==2}selected{/if}>关闭< ;/option>
</select>
</div>
<button class="layui-btnlayui-btn-primary"><i class="layui-icon"></i>搜索</button>
</div>
</form>
8. Paging-Beispiel
Controller-Code
Eingebaute Paging-Implementierung Jetzt ist es sehr einfach, den Daten eine Paging-Ausgabefunktion hinzuzufügenöffentlicher Funktionsindex(){
$title = 'Mall';
$login = 'Ouyang Ke';
# Linkes Menü
$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();
}
# Rechte Liste
$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{
$wo = true;
}
$p = isset($param['p']) ? $param['p'] : 1;
// Gesamtstatistik
$count = Db::table('shop_goods')->where($where)->count();
$list = Db::table('shop_goods')
-> ;wo($wo)
->order('add_time DESC')
->order('id DESC')
->page($p,10)
->select();
$right = $list->toArray();
foreach($right as &$right_v){
$right_v[ 'Katze'] = Db::table('shop_cat')->where('id',$right_v['cat'])->value('name');
}
Ansicht ::assign([
'title' => $title,
=> ceil($count/10),
param['status'] : 0
]);
return View::fetch();
}
Code anzeigen<div class=" layui-boxlayui-laypagelayui-laypage-default">
<a href="/index.php/Index/index?p={$p-1}&status={$status}" class="layui-laypage-prev {if $p<=1}layui -disabled{/if}">Vorherige Seite</a>
{for start="0" end="$count"}
{if $p == $i 1}
<em class="layui-laypage-em"></em>
</span>
href="/index.php/Index/index?p={$i 1}&status={$status}">{$i 1}</a>
{/if}
{/für}
<a href="/index.php/Index/index?p={$p 1}&status={$status}" class="layui-laypage-next {if $p>=$count}layui-disabled{/if}">Nächste Seite</a>
</div>
9. VorlagenseiteHolen Sie sich den HTML-Code zum Umblättern von Seiten
paginate
Gesamtmenge abrufen
render
- Controller-Code
$select = Db::table('shop_goods')->paginate(10);total
print_r($v);echo '<hr>';
}
print_r($select->render());echo '<hr>';
print_r('Total ::'.$select->total());echo '<hr>';
View::assign([
'select' => $select
]);
return View::fetch();
Code anzeigen<div>{$select|raw}</div>
css代码
.pagination {
display: inline-block;
padding-left: 0;
Rand: 20 Pixel 0;
border-radius: 4px;
}
.pagination > li {
display: inline;
}
.pagination > li > a,
.pagination > li > span {
position: relative;
float: left;
padding: 6px 12px;
margin-left: -1px;
Zeilenhöhe: 1.42857143;
Farbe: #337ab7;
Textdekoration: keine;
Hintergrundfarbe: #fff;
Rahmen: 1 Pixel einfarbig #ddd;
}
.pagination > li:erstes Kind > a,
.pagination > li:erstes Kind > span {
margin-left: 0;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.pagination > ; li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
z-index: 2;
color: #23527c;
background-color: #eee;
border-color: #ddd;
}
.pagination > .aktiv > a,
.pagination > .aktiv > span,
.pagination > .aktiv > a:hover,
.pagination > .aktiv > span:hover,
.pagination > .aktiv > a:focus,
.pagination > .aktiv > span:focus {
z-index: 3;
color: #fff;
cursor: default;
background-color: #337ab7;
Rahmenfarbe: #337ab7;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
Farbe: #777;
Cursor: nicht zulässig;
Hintergrundfarbe: #fff;
Rahmenfarbe: #ddd;
}
10. Beispiel für eine Vorlagenseite
参数 描述 list_rows 每页数量 page 当前页 path url路径 query url额外参数 fragment url锚点 var_page 分页变量 Controller-Code
public function index(){
$title = 'mall';
$login = 'Ouyang Ke';
# Linkes Menü
$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();
}
# Rechte Liste
$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{
$wo = true;
}
$p = isset($param['p']) ? $param['p'] : 1;
# thinkphp kommt mit Paging
$list = Db::table('shop_goods')
'id DESC')
. Request::param()
]);
$right = $list->toArray();
foreach($right as &$right_v){
$right_v['cat'] = Db::table('shop_cat')->where('id',$right_v['cat'])->value('name');
}
View::assign([
'title' = & gt; $ title,
'login' = & gt; gt; ,
'list' => $list,
'status' => isset($param['status'] : 0
]);
zurück View::fetch();
}
Code anzeigen<div>{$paginate|raw}</div>
11. SQL-Debugging
getLastSql
Zuletzt ausgeführte SQL-Anweisung ausgebengetLastSql
Die Methode kann nur das zuletzt ausgeführte SQL abrufen Die Methode Record
$select = Db::table('shop_goods')->select(); echo Db::getLastSql();
fetchSql
gibt direkt das aktuelle SQL zurück Anstatt
$select = Db::table('shop_goods')->fetchSql()->select(); echo $select;
12. Dynamische Konfigurationsdatenbank
config-Verzeichnis-Datenbank.php-Datei
< 🎜 auszuführen >
zurück [ 'Verbindungen' => Env::get('database.type', 'mysql'), '127.0.0.1'), . Benutzername 'Benutzername' Env::get('database.username', 'root'), => Env::get('database.password', 'root'), Env::get(' , '3306'), Die Datenbankkodierung verwendet standardmäßig utf8 'prefix' => Env::get('database.prefix', 'shop_'), // Datenbankbereitstellungsmethode: 0 zentralisiert (einzelner Server), 1 verteilt (Master-Slave-Server) 'deploy' => 0,
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT 'Status 1 on 2 off',// Ob die Datenbank liest und schreibt, wird durch den Haupttyp des Haupttyps getrennt
'rw_sepalating' = & gt; false,
// Nach dem Lesen und Schreiben wird getrennt Anzahl der Master-Server
’ ’ ’ ’ ’ ’ ’ ’ zu = & gt; '',
// Ob das Feld unbedingt vorhanden ist
'Fields_Strict' = & GT; Ob es notwendig ist, die Verbindung zu trennen und wieder herzustellen
'break_reconnect' => false,
wahr,
'schema_cache_path' => app()->getRuntimePath() 'schema' ]
];
shop_user-Tabelle in der Ouyangke-DatenbankCREATE TABLE `shop_user` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'User ID',
`account` varchar(50) NOT NULL COMMENT 'Account',
`password` char(32) NOT NULL COMMENT 'Passwort',
`name` varchar(50) NOT NULL COMMENT 'Name',
- ` add_time` int(10) unsigned NOT NULL COMMENT 'Zeit hinzufügen', PRIMARY KEY (`uid`)
Methode zum dynamischen Konfigurieren von Datenbankverbindungsinformationen
Db:: connect('ouyangke')->table( 'shop_user')->select();-Methode muss am Anfang der Abfrage aufgerufen werden und muss von der Abfragemethode gefolgt werden, andernfalls kann ein Teil der Abfrage fehlschlagen oder bleiben Sie Standard-Datenbankverbindung verwenden13. WHRER-Kettenoperation (nicht häufig verwendet)
Ähnlich wie die Abfrageausdrucksfunktion bietet ThinkPHP die folgenden schnellen Abfragemethoden
Kontinuierlicher Betrieb Funktion Unterstützte Parametertypen whereOr * Für ODER-Abfragen Strings, Arrays und Objekte whereLike* Fuzzy-Abfragen String whereNotLike* Fuzzy-Abfrage String wh ereBetween* Intervallabfrage String whereNotBetween* Nicht in Intervallabfrage String whereIn* IN-Abfrage String whereNotIn* Not IN query String whereNull* Abfrage, ob das Feld NULL ist String whereNotNull* Abfrage, ob das Feld nicht NU ist LL String whereExists* EXISTS-Abfrage String whereNotExists* Nicht in EXISTS-Abfrage String whereBetweenTime* Zeitintervallvergleich String whereTime* Schnellabfrage für Uhrzeit und Datum String whereExp* Ausdrucksabfrage, unterstützt SQL-Syntax String whereFindInSet* FIND_I N_SET-Abfrage String whereRaw* wird für die direkte Abfrage und Operation von String-Bedingungen verwendet String 14. Andere Kettenoperationen (nicht häufig verwendet)
Kontinuierliche Operationen Funktion Unterstützte Parametertypen Alias wird verwendet, um Aliase für die aktuelle Datentabelle zu definieren. Zeichenfolge streng wird verwendet Satz Legen Sie fest, ob streng geprüft werden soll, ob der Feldname vorhanden ist. Boolescher Wert Gruppe Wird zur Gruppenunterstützung für Abfragen verwendet String mit wird für die Unterstützung von Abfragen verwendet String joi n* Wird zur Join-Unterstützung für Abfragen verwendet String und Array union* Wird für Abfragen unio verwendet n Unterstützt Zeichenfolgen, Arrays und Objekte eindeutige eindeutige Unterstützung für Abfrage Tuch Boolescher Wert Sperre Sperrmechanismus für Datenbank Boolescher Wert Cache Für Abfrage-Cache Unterstützung mehrerer Parameter Kommentar Für SQL-Kommentar String force Für erzwungene Indizierung des Datensatzes String Partition für Einstellungen Partitionsinformationen Array String failException wird verwendet, um festzulegen, ob eine Ausnahme ausgelöst wird, wenn keine Daten abgefragt werden Boolescher Wert Sequenz wird verwendet, um den Namen der automatisch inkrementierenden Sequenz festzulegen Zeichenfolge ersetzen wird verwendet, um die REPLACE-Methode so einzustellen, dass sie Boolescher Wert extra schreibt. wird verwendet, um extra festzulegen Die Abfrageregel Zeichenfolge Duplikat wird verwendet, um das Array DUPLCATE-Informationen festzulegen Die Zeichenfolge Prozedur wird verwendet, um festzulegen, ob die aktuelle Abfrage eine Abfrage einer gespeicherten Prozedur ist Boolescher Wert Meister Wird verwendet, um den Hauptserver so einzustellen, dass er Daten liest. Boolescher Wert Ansicht* Wird für die Ansichtsabfrage verwendet String, Array 15. Transaktionsvorgang
InnoDB
Die Engine unterstützt die Transaktionsverarbeitung,MyISAM
unterstützt keine Transaktionsverarbeitung Die Methode
// 启动事务 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(); }
transaction
führt Datenbanktransaktionen aus. Wenn im Code im Abschluss eine Ausnahme auftritt, wird ein Rollback durchgeführt
Db::transaction(function () { $data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000]; $insert = Db::table('shop_goods')->insert($data); });
16. Datensatz
Die Datenbank wird durch Auswählen abgefragt und das Datensatzobjekt erhalten
Der Datensatz zurückgegeben Das Objekt ist
kapseltthinkCollection
, das die gleiche Verwendung wie ein Array bietet und außerdem einige zusätzliche Methoden
gefiltertNummer Methode Beschreibung 1 isEmpty ist leer 2 toArray konvertieren in Array 3 alle alle Daten 4 merge Andere Daten zusammenführen 5 diff Arrays vergleichen und zurückgeben Differenzsatz zurückgeben 6 umdrehen Schlüssel und Werte in den Daten austauschen 7 Schnittmenge Arrays vergleichen und Schnittmenge zurückgeben 8 ke ys Alle Schlüsselnamen in den Daten zurückgeben 9 pop Die Schlüsselnamen in den Daten löschen Das letzte Element 10 Verschiebung Das erste Element in den Daten löschen 11 unshift Ein Element am Anfang der Daten einfügen 12 drücken Ein Element am Ende einfügen 13 reduzieren Mit der benutzerdefinierten Funktion das Array als Zeichenfolge zurückgeben 14 Umkehrungen e Daten in umgekehrter Reihenfolge neu angeordnet 15 Chunk Daten in mehrere aufgeteilt Datenblock 16 jeder Rückruf für jedes Element der Daten ausführen 17 Filter Rückruffunktion verwenden, um Elemente in den Daten zu filtern 18 Spalte Gibt die angegebene Spalte in den Daten zurück 19 sortieren Daten sortieren 20 Reihenfolge Feldsortierung angeben 21 Shuffle Shuffle die Daten 22 Slice Einen Teil der Daten abfangen 23 map Verwenden Sie die Rückruffunktion, um die Elemente im Array zu verarbeiten 24 wo Elemente im Array basierend auf Feldbedingungen filtern 25 wo eLike Gefällt mir-Abfragefilterelement 26 whereNotLike Nicht Wie Filterelement 27 whereIn IN-Abfrage Filtern Sie die Elemente im Array 28 whereNotIn Nicht IN-Abfrage filtert die Elemente im Array 29 whereBetween Betwe Eine Abfrage filtert die Elemente im Array 30 whereNotBetween Nicht Zwischen der Abfrage werden die Elemente im Array $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()); }
Vorbereitung: Führen Sie eine Datensatzabfrage im Modell durch. Alle Datensatzobjekte werden zurückgegeben, aber
thinkmodelCollection类
(geerbt von thinkCollection) wird verwendet, die Verwendung ist jedoch konsistent.