ThinkPHP6.0-Modell
ThinkPHP6 Modell
Bitte stellen Sie sicher, dass Sie die Datenbankverbindungsinformationen in der Datenbankkonfigurationsdatei konfiguriert haben
Das Modell entspricht automatisch der Datentabelle und Die Benennung der Modellklasse Die Regel ist der Datentabellenname abzüglich des Tabellenpräfixes , unter Verwendung von Groß- und Kleinschreibung, und der erste Buchstabe wird großgeschrieben
Die dem Modell entsprechenden Datentabellennamen folgen automatisch der Kleinschreibung Unterstreichung. Wenn Ihr Tabellenname großgeschrieben wird, müssen Sie festlegen it Das Tabellenattribut des Modells.
1. Erstellen Sie das Modell
模型名 | 数据库前缀 |
Cat | shop_cat |
Goods | shop_goods |
UserOrder | shop_user_order |
Tabellenpräfix-Einstellung: config/database.php
in der Datei prefix
Schritt 1: Erstellen Sie ein Verzeichnis auf der gleichen Ebene wie der Controller, Verzeichnisname:
model
Schritt 2: Erstellen Sie
model
inGoods.php
Datei
2. Modelloperation
Zusätzlich zum Aufruf der Methoden der Datenbankklasse im Modell (also aller Abfragekonstruktormethoden der Datenbank). kann im Modell unterstützt werden), Sie können Ihre eigenen Methoden definieren, sodass Sie sich das Modell auch als erweiterte Version der Datenbank vorstellen können
Benutzerdefinierte Methoden in der Modelldatei sollten nicht verwechselt werden mit Die thinkphp-Methode hat den gleichen Namen
Goods::
im Modell kann auchstatic::
verwendet werden SchlüsselwörterKettenoperationen können im Modell verwendet werden
1 find
Daten abfragen
Einzelne finden Datenelement und geben die Objektinstanz des aktuellen Modell-
Namespace zurück appmodel;
use thinkModel;
class Goods erweitert Model{
öffentliche Funktion find(){
$find = Goods::find(6) ;
$find = Goods::where('id',7)->find();
return $find;
}
}
2. So rufen Sie controller
model
Namespace-Appcontroller auf;verwenden Sie appmodelGoods;Klasse Index{public function index(){ $db = new Goods(); $index = $db->find(); print_r($index); }}find(6) Die Abfrage ist fehlgeschlagen, da der Datenbank-Primärschlüsselname nicht id ist3 ,
Daten abfragenselect
public function select(){ $select = Goods::select(); $select = Goods::select(6); $select = Goods::where('id','>',7)->select(); return $select;}4. Die Datenkonvertierungsmethode
gibt die aktuelle Modellinstanz als Array aus toArray
öffentliche Funktion select(){ $select = Goods::select(); $select = Goods::select(6); $select = Goods::where('id','>',7)- >select(); return $select->toArray();}5. Daten hinzufügen
Die statische Methode fügt Daten hinzu und gibt die Objektinstanz des aktuellen Modells zurück
create
public function create(){ $create = Goods::create([ 'cat' => 3,'title' => 'Neues Produkt',
'price' =>
'add_time' => > ]);
echo $create->id; // Sie können die selbstinkrementierte ID direkt erhalten
return $create;
}
Best-Practice-Grundsätze zum Hinzufügen von Daten: Verwenden Sie die Methode „create“, um Daten hinzuzufügen, und verwenden Sie „saveAll“, um Daten stapelweise hinzuzufügen.
6. Daten ändern
- Die statische Methode ändert die Daten und gibt die Objektinstanz des aktuellen Modells zurück
update
- Ändern Sie nach dem Abrufen der Daten die Felder, um die Daten zu aktualisieren. Diese Methode ist die beste Möglichkeit,
save
use thinkModel;
class Goods erweitert Model{
< zu aktualisieren 🎜> öffentliche Funktion update(){ # Update-Methode 1 $update = Goods::update( ['id'=>22] ); return $update; # Update-Methode 2 $user = Goods::find(23); $user->price = '102.99'; $save = $user->save(); return $sparen; }}7. Daten löschen
Die statische Methode löscht Daten und gibt die Objektinstanz des aktuellen Modells zurück
delete
Löschen Sie gemäß dem Primärschlüssel ',3)->delete(); # Löschmethode 2$delete = User::destroy(4);
return $delete;destroy
TP-Modell, wenn nur Wenn Sie hinzufügen, löschen, prüfen und ändern können, ist es besser, dies inauszuführen. Das TP-Modell verfügt über viele Funktionen. Lassen Sie uns diese im Folgenden einzeln vorstellen.
3. Modelleinstellungen
Um sich besser an die Datenbank anzupassen, kann das Modell die entsprechenden Datenbankattribute im Voraus festlegen. und konfigurieren Sie Daten in einer Dateitabelle
属性 描述 name 模型名(相当于不带数据表前后缀的表名,默认为当前模型类名) table 数据表名(默认自动获取) pk 主键名(默认为 id ) schema 模型对应数据表字段及类型 type 模型需要自动转换的字段及类型 disuse 数据表废弃字段(数组) 1. Name und Tabelle
Wenn Ihre Datentabelle kein Präfix hat, gibt es keinen Unterschied in der Definition von Namens- und Tabellenattributen. Sie können eine der
Klassen definieren Goods erweitert Model{
protected $name = 'Goods';
protected $table = 'shop_goods';
öffentliche Funktion select(){
$select = Goods::select();
return $select->toArray();
}
}
2. pk Ändern Sie den Primärschlüsselnamen
model Der Standard-Primärschlüssel ist id
// Sie kann den Primärschlüssel ändern. Versuchen Sie
ALTER TABLE für shop_id `ouyangke`.`shop_goods`
SÄULE ÄNDERN `id` `shop_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Produkt-ID' ZUERST,
Drop PRIMARY KEY,
PRIMÄRSCHLÜSSEL HINZUFÜGEN (`shop_id`) USING BTREE;
class Goods erweitert Model{
protected $name = 'Goods';
protected $table = 'shop_goods';
protected $pk = 'shop_id';
öffentliche Funktion find($id=1){
$find = Goods::find($id);
return $find-> toArray();
}
}
3.
schema
Legen Sie die entsprechenden Datentabellenfelder und -typen fest
Es wird standardmäßig automatisch abgerufen (einschließlich Feldtypen), aber die automatische Erfassung führt zu einem zusätzlichen Abfrage-
Schema Sobald das Attribut definiert ist, muss der vollständige Datentabellenfeldtyp definiert werden.
Der Typ wird entsprechend dem PHP-Datentyp definiert. Wenn es sich um einen JSON-Typ handelt, kann er direkt definiert werden als json
class Goods erweitert Model{
protected $name = 'Goods';
protected $table = 'shop_goods';
protected $pk = 'shop_id';
protected $schema = [
' shop_id' => 'int',
'cat' => 'int',
'title' => ',
'discount' => 'int',
'stock' => 'int',
'status' => ' => 'int'
];
# Um den Typ eines Feldes zu definieren, das automatisch konvertiert werden muss, können Sie das Typattribut
protected $type = [
'shop_id' => 'int'
];
öffentliche Funktion select(){
$select = Goods::select();
Return $select->toArray();
}
}
4.
disuse
Aufgegebene Felder der Datentabelle (Array)Klasse Waren erweitert Modell{
protected $name = 'Goods';
protected $table = 'shop_goods';
protected $pk = 'shop_id';
protected $disuse = [
'Rabatt',
'Lager'
];
öffentliche Funktion select(){
$select = Goods::select();
zurück $select->toArray();
}
}
Andere Attribute (nicht häufig verwendet)
属性 描述 suffix 数据表后缀(默认为空) connection 数据库连接(默认读取数据库配置) query 模型使用的查询类名称 field 模型允许写入的字段列表(数组) strict 是否严格区分字段大小写(默认为 true ) readonly 字段只读 json 设置字段为JSON数据 jsonType 设置JSON字段的类型 jsonAssoc 设置JSON数据返回数组 autoWriteTimestamp 自动写入创建和更新的时间戳字段(默认关闭) createTime 创建时间戳字段 updateTime 更新时间戳字段 deleteTime 用于定义你的软删除标记字段 defaultSoftDelete 定义软删除字段的默认值 4. Modell Hauptfunktionen
1. Getter
Die Funktion des Getters besteht darin, die (Original-)Daten der Modellinstanz automatisch zu verarbeiten
Benennungsregeln:
get 字段名 Attr
Der Feldname ist die Groß-/Kleinschreibung des Datentabellenfelds
Klasse Goods erweitert Model{
public function index(){
$find = Goods::find(10);
echo $find->status;
zurück $find->toArray();
}
öffentliche Funktion getStatusAttr($v){
$status = [
1=>'Ein',
2=>'Schließen'
}
}
2. ModifikatorDie Hauptfunktion des Modifikators besteht darin, den vom Modell festgelegten Datenobjektwert zu verarbeiten
public function index(){
Namensregeln:
class Goods erweitert Model{
set 字段名 Attr
$create = Goods::create([
'cat' => 3,33,
'title' => 'Neues Produkt',
'price' => 'add_time' => time()
]);
return $create;
}
öffentliche Funktion setCatAttr($v,$all){
// $all alle Parameter
return (int)$v;
}
}
3. Sucher Der Sucher wird verwendet, um die Abfragebedingungen von Feldern (oder Suchkennungen) auszudrückenBenennungsregeln:
$select = Goods::withSearch([ 'Titel'],[class Goods erweitert Model{
public function index(){search 字段名 Attr
'title' => 'Neu'
])->select();
return $select->toArray();
}
öffentliche Funktion searchTitleAttr($query,$v){
$query->where('title','like', $v . '%');
}
}
4. Daten prüfen
Wenn Sie beurteilen möchten, ob der Datensatz leer ist, können Sie
empty
nicht direkt zur Beurteilung verwendenSie müssen die Methode
isEmpty
verwenden des zu beurteilenden DatensatzobjektsKlasse Waren erstreckt sich Model{
public function index(){
$select = Goods::where('title','1')->select();
if (leer($select)){
echo 111;
}
if($select->isEmpty()){
echo 111;
}
}
}
5. Die Liste auf der rechten Seite wurde in Modellbeispiel
Modellcode
geändertNamespace-Appmodel;
Verwendung thinkModel;
use thinkfacadeDb;
class Goods erweitert Model{
protected $name = 'Goods';
protected $table = 'shop_goods';
öffentliche Funktion get_all($where,$order='add_time DESC',$p=1,$total=10){
$count = Goods::where($where)->count();
$list = Goods::where($where)
->order($order)
- ->select();
if($list-> $list->toArray();
foreach($data as &$data_v){
$data_v['cat'] = Db::table('shop_cat')->where('id',$data_v['cat'])->value('name');
}
$ arr = [
'count' => ceil($count/$total),
}
öffentliche Funktion getStatusAttr($v){
$status = [
1=>'On',
2=>'Schließen'
; Rückgabedatum('Y-m-d',$v);
}
}
Controller-Code<td>{$right_v.status}</td><td>{$right_v.add_t ime}</td>public function index(){
$title = '商城';
$login = '欧阳克';
# 左侧菜单
$menu = Db::table('shop_menu')->where('fid',0)->select();
$left = [];
foreach($menu als $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'
];
$right = $db->get_all($where,$order,$p,5);
View::assign([
'title' => $title,
'login' => '],
'count' => $right['count'],
'p' =>
'status' => param['status'] : 0
]);
zurück View::fetch();
}
html代码六、模型事件模型事件是指在进行模型的查询和写入操作的时候触发的操作行为
模型事件只在调用模型的方法生效,使用查询构造器操作是无效的
Nummer Ereignis Beschreibung Name der Ereignismethode 1 after_read After query onAfterRead 2 before_insert Vor dem Hinzufügen von onBeforeInsert 3 after_insert Nach dem Hinzufügen onAfterInsert 4 before_update Vor dem Update onBeforeUpdate 5 after_update Nach dem Update onAfterUpdate 6 before_write Vor dem Schreiben onBeforeWrite 7 after_write Nach dem Schreiben onAfterWrite 8 before_delete Vor dem Löschen onBeforeDelete 9 after_delete Nach dem Löschen onAfterDelete 10 vor re_restore Vor der Wiederherstellung onBeforeRestore 11 after_rest ore 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; } }