ThinkPHP6.0モデル



ThinkPHP6 モデル

  • データベース設定ファイルでデータベース接続情報が設定されていることを確認してください。

  • モデルは自動的にデータ テーブルに対応します。モデル クラスの命名規則は、データ テーブルの名前からテーブルのプレフィックスを引いたもので、キャメル ケースの命名が使用され、最初の文字は大文字になります

  • モデルに自動的に対応するデータ テーブル名は、小文字とアンダースコアの仕様に従います。テーブル名が大文字の場合は、モデルのテーブル属性を設定する必要があります。

  • #1. モデルの作成

#モデル名データベース プレフィックスCatshop_catGoods shop_goodsUserOrder shop_user_order

テーブルプレフィックス設定: config/database.php ファイル内 prefix

  • ステップ 1: 同じレベルでコントローラーを作成するディレクトリ、ディレクトリ名: model

  • ステップ 2: model ## に Goods.php ファイル## を作成します

  • 2. モデルの操作

#モデル内のデータベース クラスのメソッドの呼び出しに加えて (つまり、データベースのすべてのクエリ コンストラクター メソッドをモデルでサポートできます)独自のメソッドを定義できるため、モデルをデータベースの拡張バージョンとみなすこともできます。

    モデル ファイル内のカスタム メソッドは、thinkphp と同じ名前であってはなりませんmethod
  • Goods::

    モデル内の static:: キーワード

  • も使用できます
  • 1 と
find

を使用してモデル #find 内のデータをクエリし、単一のデータを取得して返すことができます。現在のモデルのオブジェクト インスタンス

namespace app\model;

use think\Model;

class Goods extends Model{

public function find(){

$find = Goods::find(6);

$find = Goods::where('id',7)->find();

return $find;

}

}

2.
controller

model## の呼び出し方法#名前空間 app\controller;

use app\model\Goods;

クラス インデックス{

パブリック関数 Index(){

$db = new Goods( );

$index = $db->find();

# print_r($index);

##find(6 ) データベースの主キー名が id

3 ではないため、クエリは失敗しました。

select

Query data

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', '>gt;',7)->select(); return $select->toArray();

}

5. データを追加します

#create

静的メソッドはデータを追加し、現在のモデルのオブジェクト インスタンスを返します

public function create(){

$create = Goods::create([
  • '猫' => 3,

    'タイトル' => '新製品',

    '価格' => '59.99',

    'add_time' => time()

    ]);

    echo $create->id; // 自動インクリメントされる ID を直接取得できます

    return $create;

    }

    データ追加のベスト プラクティス原則: データを追加するには create メソッドを使用し、バッチでデータを追加するには saveAll を使用します。

    6. データの変更

    • update 静的メソッドはデータを変更し、現在のモデルのオブジェクト インスタンスを返します

    • save データを取得した後、フィールドを変更してデータを更新します。このメソッドは、

    ##namespace app\model;

    use think\Model;

    class Goods extends Model {# を更新する最良の方法です。

    ## public function update(){

    # 更新メソッド 1

    $update = Goods::update(

    ['price'=> '99.99 '],

    ['id'=>22]

    $user = Goods::find(23);

    $user->price = '102.99';

    $save = $user->save();

    $save を返す;

    }

    }

    7. データの削除

    delete
    静的メソッドはデータを削除し、現在のモデルのオブジェクト インスタンスを返します

    • destroy主キーに従って削除

    • public function delete(){ #メソッド 1 を削除

    • $delete = Goods::where('id',3)->delete();
    #削除メソッド 2

    $delete = User::destroy(4 );

    return $delete;

    }

    TP モデルが追加、削除、確認、変更のみ可能な場合は、 で実行することをお勧めします。

    コントローラー

    。 TP モデルには多くの機能がありますので、以下で 1 つずつ紹介しましょう

    3. モデル設定

    データベースによりよく適応するために、モデルは対応するデータベース属性を事前に設定できます。 1 つのファイル サーフェスに 1 つのデータを構成します

#

1. 名前とテーブル

データ テーブルにプレフィックスがない場合、名前とテーブル属性の定義に違いはありません。どちらかを定義できます

class Goods はモデルを拡張します{

protected $name = 'Goods';

protected $table = 'shop_goods';

public function select(){

$select = Goods::select();

return $select->toArray();

}

}

2 , pk 主キー名を変更します

model デフォルトの主キーは id

// 主キーを shop_id try

ALTER に変更できますTABLE `ouyangke`.`shop_goods `

CHANGE COLUMN `id` `shop_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ' Product ID' FIRST,

DROP PRIMARY KEY,

ADD PRIMARY KEY ( `shop_id`) USING BTREE;

class Goods extends Model{

protected $name = 'Goods';

protected $table = ' shop_goods';

protected $pk = 'shop_id';

public function find($id=1){

$find = Goods::find($id) ;

return $find->toArray();

}

}

3, スキーマ Setモデルに対応するデータ テーブルのフィールドとタイプ

  • #デフォルトでは (フィールド タイプを含む) 自動的に取得されますが、自動取得により追加のクエリが発生します

  • スキーマ属性を定義したら、完全なデータ テーブル フィールド タイプを定義する必要があります

  • ##タイプは、php データ タイプに従って定義されます。json の場合タイプの場合、json

class Goods extends Model{

protected $name = 'Goods';

protected として直接定義できます。 $table = 'shop_goods';

protected $pk = 'shop_id';

protected $schema = [

使用する, - > ; '文字列',

'価格' => '浮動小数点',

'割引' => '整数',

'在庫' => ' int',

'status' => 'int',

'add_time' => 'int'

];

# に特定のフィールドに対して自動的に変換する必要がある型を定義するには、型属性を使用できます

protected $type = [

” 'shop_id' => 'int'

];

パブリック関数 select(){

$select = Goods::select();

Return $select->toArray();

}

}

4、disuse データ テーブルの破棄されたフィールド (配列)

class Goods はモデルを拡張します{

protected $name = 'Goods';

protected $table = 'shop_goods';

protected $pk = 'shop_id';

protected $disuse = [

'割引',

'在庫'

];

public function select(){

$select = Goods::select();

return $select->toArray();

}

}

5. その他の属性 (一般的には使用されません)

属性説明
name モデル名 (データテーブルのサフィックスまたはサフィックスがないことに相当) ) テーブル名。デフォルトは現在のモデル クラス名です)
table データ テーブル名 (デフォルトで自動的に取得されます)
pk 主キー名 (デフォルトは id)
スキーマ 対応するデータ テーブル フィールドとモデルのタイプ
type モデルによって自動的に変換される必要があるフィールドとタイプ
disuse データ テーブル破棄されたフィールド (配列)
# json フィールドを JSON データに設定しますjsonType JSON フィールドのタイプを設定します jsonAssoc JSON データの戻り配列を設定しますautoWriteTimestamp 作成および更新されたタイムスタンプ フィールドを自動的に書き込みます (デフォルトではオフ)createTime タイムスタンプ フィールドの作成updateTime タイムスタンプ フィールドの更新#deleteTime ソフト デリート マーク フィールドの定義に使用されます#defaultSoftDelete ##ソフト デリート フィールドのデフォルト値を定義します
属性説明
suffix データテーブルのサフィックス(デフォルトは空)
connection データベース接続 (デフォルトの読み取りデータベース構成)
query モデルで使用されるクエリ クラス名
field モデルが書き込みを許可するフィールド リスト (配列)
strict 厳密ですか? 大文字と小文字を区別するフィールドを区別します (デフォルトは true)
readonly フィールドは読み取り専用です
#

4. モデルの主な機能

1. ゲッター

  • ゲッターの機能は、モデル インスタンスの (元の) データを自動的に処理することです

  • 命名規則: get field name Attr

  • フィールド名は、データ テーブル フィールドのキャメル ケース変換です

class Goods extends Model{

public functionindex(){

$find = Goods::find(10);

echo $ find->status;

( status = [

]

1=>'開く',

2=>'閉じる'

]; ];

}

}

2. 修飾子

メイン関数モディファイアのモデルを設定することです データ オブジェクトの値が処理されます

命名規則:

set field name Attr
  • #class Goods extends Model {

    public functionindex(){

    $create = Goods::create([
' => '新製品' ,

'価格' => '59.99',

'add_time' => time()

]);

$create を返す; # Return (int)$v;

}

}

3. Searcher

Searcher です。フィールド (または検索識別子) のクエリ条件式をカプセル化するために使用されます。

# 命名規則:

検索フィールド名 Attr

class Goods extends Model{

public functionindex(){

$select = Goods::withSearch(['title'],[
  • ) 'title' => 'New'

    ])->select();
  • return $select->toArray();

    }

    public function searchTitleAttr($query,$v){
$query->where('title','like', $v . '%');

}

}

4. データの確認

  • データ セットが空かどうかを判断したい場合は、empty Judge

  • # を使用する必要があります。 ## データセットオブジェクト isEmpty メソッド判定

##class Goods extends Model{

public functionindex(){

$select = Goods:: where('title','1')->select();

if(empty($select)){

echo 111;

}

stos

5。モデルの右のリストを変更する

#モデルコード

# app \ model;#
##use think\Model;

use think\facade\Db;

class Goods extends Model{

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

using using ’ ’ s ’ s ’ ‐ 1 1 t t t t t t t t t t t t t t t t t t t t t t t t t t t t $ Total)

-& GT; Select ();

## counter ($ list -& gt; isempty ()) {

Return null;

}

$data = $list-> ; toArray();

# s s s sを使用して - ‐ ‐ $データt's t-d。:table( 'shop_cat') - > where( 'id'、$ data_v ['cat']) - > value('name');

}

$arr = [

'Count' = & GT; CEIL ($ Count/$ Total),

'Data' = & GT; $ data

#/ return $arr;

}

public function getStatusAttr($v){

$status = [

1=>'開く',

2=>'閉じる'

];

return $status[$v]; ($v){

return date('Y-m-d',$v);

}

}

コントローラ コード

public functionindex(){

$title = '商城';

$login = '欧阳克';

# 左サイド菜单

$menu = Db::table('shop_menu')->where('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'

];

$right = $db->get_all($where,$order,$p,5);

View::assign([

'title' => $title,

'login' => $login,

'left ' => $left,

'right' => $right['data'],

'count' => $right['count'],

'p' => $p,

'status' => isset($param['status']) ? $param['status'] : 0

]);

return View::fetch();

}

html代码

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

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

六、モデル イベント

  • モデル イベントとは、モデルの指示と書き込み操作を実行するときにトリガーされる操作の実行を意味します。操作は無能です

#番号イベント説明イベント メソッド名1after_readクエリ後 onAfterRead2 before_insert 追加前onBeforeInsert3 after_insert 追加後onAfterInsert4before_update before updateonBeforeUpdate5 after_update 更新後onAfterUpdate##6 7
before_write 書く前 onBeforeWrite
after_write 書き込み後onAfterWrite
8 before_delete before_deleteonBeforeDelete
9 after_delete 削除後onAfterDelete
10 before_restore 回復前onBeforeRestore
11 after_restore リカバリ後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;
    }
}