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

模型名数据库前缀
Catshop_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 in Goods.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 auch static:: verwendet werden Schlüsselwörter

  • Kettenoperationen können im Modell verwendet werden

1 findDaten 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 controllermodel

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 ist

3 ,

Daten abfragenselect

auswählen Rufen Sie mehrere Daten ab und geben Sie die Objektinstanz des aktuellen Modells zurück

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

namespace appmodel;

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);destroy

    return $delete;
}

TP-Modell, wenn nur Wenn Sie hinzufügen, löschen, prüfen und ändern können, ist es besser, dies in

auszufü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. Modifikator

Die Hauptfunktion des Modifikators besteht darin, den vom Modell festgelegten Datenobjektwert zu verarbeiten

  • Namensregeln:

  • set 字段名 Attr

    class Goods erweitert Model{
public function index(){

$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ücken

    Benennungsregeln:
  • class Goods erweitert Model{search 字段名 Attr

    public function index(){
$select = Goods::withSearch([ 'Titel'],[

'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 verwenden

  • Sie müssen die Methode isEmpty verwenden des zu beurteilenden Datensatzobjekts

Klasse 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ändert

Namespace-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

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代码

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

<td>{$right_v.add_t ime}</td>

六、模型事件

模型事件是指在进行模型的查询和写入操作的时候触发的操作行为

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

NummerEreignisBeschreibungName der Ereignismethode
1after_readAfter query onAfterRead
2 before_insert Vor dem Hinzufügen von onBeforeInsert
3 after_insert Nach dem HinzufügenonAfterInsert
4before_update Vor dem UpdateonBeforeUpdate
5 after_update Nach dem UpdateonAfterUpdate
6 before_write Vor dem SchreibenonBeforeWrite
7 after_write Nach dem SchreibenonAfterWrite
8 before_delete Vor dem LöschenonBeforeDelete
9 after_delete Nach dem LöschenonAfterDelete
10 vor re_restore Vor der WiederherstellungonBeforeRestore
11 after_rest ore 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;
    }
}