Model ThinkPHP6.0



thinkphp6 Model

  • Pelayan Pastikan anda telah mengkonfigurasi maklumat sambungan pangkalan data dalam fail konfigurasi pangkalan data

  • Model secara automatik akan sesuai dengan jadual data. nama jadual data tolak awalan jadual , menggunakan penamaan huruf besar, dan huruf pertama ditulis dengan huruf besar

  • Nama jadual data secara automatik mengikut spesifikasi huruf kecil + garis bawah Jika nama jadual anda ditulis dengan huruf besar, anda mesti menetapkan atribut jadual model. 1. Buat model

UserOrder

shop_user_order

Tetapan awalan jadual: awalan dalam fail config/database.phpconfig/database.php 文件里 prefix

  • 第一步:创建一个跟控制器平级的目录,目录名:model

  • 第二步:在 model 创建 Goods.php 文件

二、模型操作

在模型中除了可以调用数据库类的方法之外(换句话说,数据库的所有查询构造器方法模型中都可以支持),可以定义自己的方法,所以也可以把模型看成是数据库的增强版

  • 模型文件里的自定义方法,不要和 thinkphp 方法一样名称

  • 模型里的 Goods:: 也可以用 static:: 关键词

  • 链式操作,都可以在模型里使用

1、find查询数据

find 获取单条数据,返回的是当前模型的对象实例

namespace appmodel;

use thinkModel;

class Goods extends Model{

    public function find(){

        $find = Goods::find(6);

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

        return $find;

    }

}

2、controller怎么调用model

namespace appcontroller;

use appmodelGoods;

class Index{

    public function index(){

        $db = new Goods();

        $index = $db->find();

        print_r($index);

    }

}

find(6) 查询失败,是因为数据库主键名称不是 id

3、select查询数据

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','>',7)->select();

    return $select->toArray();

}

5、增加数据

  • create

    • Langkah 1 : Buat direktori pada tahap yang sama dengan pengawal, nama direktori: model
  • Langkah 2: Buat Goods.phpmodel kod> fail

    2. Operasi model

    Selain memanggil kaedah kelas pangkalan data dalam model (dengan kata lain, semua kaedah pembina pertanyaan pangkalan data boleh disokong dalam model) , anda boleh Tentukan kaedah anda sendiri, jadi anda juga boleh menganggap model sebagai versi pangkalan data yang dipertingkatkan

    • Kaedah tersuai dalam fail model tidak sepatutnya sama dengan kaedah thinkphp Name🎜🎜
    • 🎜 Barang:: dalam model juga boleh digunakan static:: kata kunci🎜🎜
    • 🎜 Operasi rantaian boleh digunakan dalam model Gunakan 🎜🎜🎜🎜1, cari untuk menanyakan data 🎜🎜cari untuk mendapatkan sekeping data yang dikembalikan ialah contoh objek model semasa 🎜🎜 🎜model aplikasi ruang nama;🎜🎜gunakan thinkModel;🎜🎜barangan kelas memanjangkan Model{ 🎜🎜 fungsi awam find(){🎜🎜 $find = Barang::find(6);🎜🎜 $find = Barang::where('id' ,7)->find();🎜🎜 kembalikan $find; 🎜🎜 }🎜🎜}🎜
    🎜2 .                                  menggunakan   menggunakan   menggunakan           menggunakan menggunakan ' 's ' melalui keluar menggunakan 's ' menggunakan ‐                  keluar keluar melalui '' ' ‐ ‐ ‐ ‐ ‐‐‐‐‐w antara Pertanyaan find(6) gagal kerana nama kunci utama pangkalan data bukan id🎜🎜3 select Data pertanyaan🎜🎜select mendapat berbilang keping data dan mengembalikan contoh objek model semasa🎜🎜🎜fungsi awam pilih (){🎜🎜 $select = Barang::select();🎜🎜 $select = Barang::select(6);🎜🎜 $select = Barang ::di mana('id','>',7)- >select();🎜🎜 Kembalikan $select;🎜🎜}🎜🎜4. Penukaran data🎜🎜kepada Array kaedah mengeluarkan contoh model semasa sebagai tatasusunan🎜🎜🎜fungsi awam pilih (){🎜🎜 $select = Barang::select();🎜🎜 $select = Barang::select(6);🎜🎜 $select = Barang ::where('id','>',7)- >select();🎜🎜 return $select->toArray();🎜🎜}🎜🎜5 style="list-style-type: disc;">
  • 🎜create Kaedah statik menambah data dan mengembalikan contoh objek model semasa🎜🎜🎜🎜🎜public function create(){🎜 🎜 $create = Barang::create([🎜🎜 "cat" = > 3,🎜

                                                                                                 ‐ ‐ ‐ 'title' => // Anda boleh terus mendapatkan ID yang meningkat sendiri

    Return $create;

    }

    Prinsip amalan terbaik untuk menambah data: gunakan kaedah cipta untuk menambah data, dan gunakan saveAll untuk menambah data dalam kelompok.

    6. Ubah suai data

    kemas kini Kaedah statik mengubah suai data dan mengembalikan contoh objek model semasa
  • simpan Selepas mengambil keluar data, tukar medan untuk mengemas kini data. Kaedah ini ialah cara terbaik untuk mengemas kini

namespace appmodel;
  • gunakan thinkModel;

    update 静态方法修改数据,返回的是当前模型的对象实例

  • save 在取出数据后,更改字段更新数据。这种方式是最佳的更新方式

namespace appmodel;

use thinkModel;

class Goods extends Model{

    public function update(){

        # 更新方式1

        $update = Goods::update(

            ['price'=>'99.99'],

            ['id'=>22]

        );

        return $update;

        # 更新方式2

        $user = Goods::find(23);

        $user->price     = '102.99';

        $save = $user->save();

        return $save;

    }

}

7、删除数据

  • delete 静态方法删除数据,返回的是当前模型的对象实例

  • destroy 根据主键删除

public function delete(){

    # 删除方法1

    $delete = Goods::where('id',3)->delete();

    # 删除方法2

    $delete = User::destroy(4);

    return $delete;

}

TP模型如果只能增删查改,不如在 Controller barangan kelas memanjangkan Model{

kemas kini fungsi awam(){

#Kaedah kemas kini 2 pulangkan $kemas kini;

🎜          # Kaedah Kemas Kini 2🎜🎜           $pengguna = Barang::cari(23);🎜🎜                                                                                     keluar keluar melalui keluar menggunakan ' ' s ' through ' s ' through ‐ ‐ ‐ ‐‐‐​ ​​ ​ ​                               melalui     melalui ‐ ‐ ‐ ‐‐ ‐‐‐‐ ‐ ‐ 🎜🎜 }🎜🎜}🎜🎜 🎜🎜 padamkan data.<🎜🎜 >Kaedah statik memadam data dan mengembalikan contoh objek model semasa🎜🎜🎜musnahkan Padam mengikut kekunci utama🎜
🎜fungsi awam delete(){🎜🎜 # Padam kaedah 1🎜🎜 $padam = Barang::di mana('id',3)->padam( );🎜🎜 #Padam kaedah 2🎜🎜 $padam = Pengguna::musnah(4);🎜🎜 pulangkan $padam ;🎜🎜}🎜🎜🎜Jika model TP hanya boleh ditambah, dipadam, disemak dan diubah suai, lebih baik menggunakan Controllerdilaksanakan. Model TP mempunyai banyak ciri, yang diperkenalkan satu demi satu di bawah🎜🎜3 Tetapan model🎜🎜Untuk menyesuaikan diri dengan pangkalan data dengan lebih baik, model boleh menetapkan sifat pangkalan data yang sepadan terlebih dahulu, dan mengkonfigurasi satu jadual data dalam satu fail. 🎜 nama jadual (lalai automatik mendapatkan) PK Primary Nama Kunci (lalai adalah ID) Schema Bidang dan Jenis Data yang sepadan dengan Model ditukar secara automatik tidak digunakan Jadual data medan terbengkalai (tatasusunan)

1. nama dan jadual

Apabila jadual data anda tidak mempunyai awalan, tiada perbezaan dalam takrifan nama dan atribut jadual Anda boleh mentakrifkan salah satu

class Barang memanjangkan Model{

protected $name = 'Barang. ';

protected $table = 'shop_goods';

public function select(){

$select = Goods::select();

return $select->toArray();

}

} . COLUMN `id` `shop_id ` int(10) UNTIGNED NOT NULL AUTO_INNCREMENT ULASAN ' ID Produk' DIDAHULUKAN,

LEPASKAN KUNCI UTAMA,

TAMBAHKAN KUNCI UTAMA (`shop_id`) MENGGUNAKAN BTREE;{

s extend​ protected $name = 'Barang';

protected $table = 'shop_goods';

protected $pk = 'shop_id';

public function find($id=1){

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

return $find->toArray();

}

}

3

Tetapkan medan dan jenis jadual data yang sepadan dengan model

Ia akan diperoleh secara automatik lalai (termasuk jenis medan), tetapi pemerolehan automatik akan menyebabkan peningkatan A atribut pertanyaan

setelah ditakrifkan, jenis medan jadual data yang lengkap mesti ditakrifkan

Jenis ditakrifkan mengikut jenis data php Jika ia adalah jenis json, ia boleh ditakrifkan secara langsung sebagai json

schema

  • class Barangan memanjangkan Model {

    protected $name = 'Barang';
  • protected $table = 'shop_goods';

    protected $pk = ' shop_id';
  • protected $schema = [

    'shop_id' => 'int',
                                                                  gunakan menggunakan ' ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ 'kucing' => keluar   ‐ ‐ ‐‐ ‐ ke 'stok' => 'int',

'status' => 'int',

'int'

];

# Tentukan jenis medan yang perlu ditukar secara automatik , anda boleh menggunakan atribut jenis

protected $type = [

] 'shop_id' => 'int'

];

public function select(){

$select = Barang::select();

                                                                                                                                                                                                                                                ;

dilindungi $pk = 'shop_id';

dilindungi $disuse = [

'diskaun',

disuse 'stok'

] ;

fungsi awam pilih(){

$ pilih = barang :: pilih ();

Kembalikan $ pilih- & gt;

AttributeDeskripsi
nama Nama model (bersamaan dengan nama jadual tanpa akhiran dan akhiran jadual data, lalai ialah nama kelas model semasa)
hanya dibaca . autoWriteTimestamp createTime kemas kiniMasa sedang digunakan untuk memadamkan medan lembutdef aultSoftDelete Definisi Nilai lalai untuk medan yang dipadam lembut

4. Fungsi utama model

1. Getter

  • Fungsi getter adalah untuk memproses data (asal) contoh model secara automatik

  • Peraturan penamaan: mendapatkan + nama medan + Attr< /code>get + 字段名 + Attr

  • 字段名是数据表字段的驼峰转换

class Goods extends Model{

    public function index(){

        $find = Goods::find(10);

        echo $find->status;

        return $find->toArray();

    }

    public function getStatusAttr($v){

        $status = [

            1=>'开启',

            2=>'关闭'

        ];

        return $status[$v];

    }

}

2、修改器

  • 修改器的主要作用是对模型设置的数据对象值进行处理

  • 命名规则: set + 字段名 + Attr

class Goods extends Model{

    public function index(){

        $create = Goods::create([

            'cat' =>  3.33,

            'title' =>  '新商品',

            'price' =>  '59.99',

            'add_time' => time()

        ]);

        return $create;

    }

    public function setCatAttr($v,$all){

        // $all 全部参数

        return (int)$v;

    }

}

3、搜索器

  • 搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式

  • 命名规则: search + 字段名 + Attr

Nama medan ialah penukaran kotak unta bagi medan jadual data

class Barang memanjangkan Model{

indeks fungsi awam(){

                                                                            $find->status;

                                                                                                                                                                                                                                                          ,      ,   ,,,,,,,,, Hidupkan',

2=>'Tutup'

                                                                                                                                         mengembalikan $status[$v];

Peraturan penamaan: set + nama medan + Attr

class Barang memanjangkan Model{

indeks fungsi awam(){

$create = Barang::create ([

🎜                                                                                                                                                                                                                                                                                                                                                                                                     ' => masa()🎜🎜 ]);🎜🎜                                                                                                                                                                                                                                                                                                                                                                                                                                                                 🎜}🎜🎜 🎜3. Pencari🎜🎜🎜🎜Fungsi pencari adalah untuk merangkum ungkapan keadaan pertanyaan medan (atau pengecam carian)🎜 🎜🎜🎜Peraturan penamaan: carian + nama medan + Attr🎜🎜 🎜🎜🎜kelas Barangan memanjangkan Model{🎜🎜 indeks fungsi awam(){🎜🎜 $select = Barang::withSearch(['title '],[🎜🎜 ]) -> ;select();🎜🎜                                                                                                                  ,,,                            ,,,,,,,,,,; $v . Semak data🎜
  • Jika anda ingin menilai sama ada set data kosong, anda tidak boleh terus menggunakan kosong untuk menilai empty 判断

  • 必须使用数据集对象的 isEmpty

Anda mesti menggunakan kaedah isEmpty set data bantah untuk menilai

barangan kelas memanjangkan Model{

indeks fungsi awam(){

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

if( kosong($select)){

echo 111;

                                                                                                             

5. Senarai di sebelah kanan ditukar kepada contoh model

kod model

namespace appmodel;

gunakan thinkModel;

gunakan thinkfacadeDb;

barangan kelas memanjangkan Model{

dilindungi $name = 'Barang';

dilindungi $table = 'kedai_barang';

public function get_all($ where,$order='add_time DESC',$p=1,$ jumlah=10){

$count = Barang::where($where)->count();

$list = Barang::where ($where)

                                                                                                                                                                                                                                                                                                                                                                      

          jika($list->is Empty(( )){

                                                                                                                                                                                                                   pulangan null; 'kucing'] = Db::table(' shop_cat')->where('id',$data_v['cat'])->value('name');

      }

            $arr = [

                'bilangan' => siling($ kiraan/$jumlah),

                                                                                                                  $data $status = [

;

;

;                                                                                                                'Tutup '

Tarikh kembali('Y-m-d ',$v);

}

}

kod pengawal

indeks fungsi awam(){

     $title = '商城';

   $log masuk = '欧阳克';

    # 左侧菜单t; di mana('fid',0)->select();

    $left = [];

    foreach($menu as $menu_k=>$menu_v){

        $left[$menu_k] = $menu_k] ;

        $left[$menu_k]['lists'] = Db::table('shop_menu')->where('fid',$menu_v['id'])->select();

}

    # 右侧列表

     $param = Permintaan::param();

     if(isset($param['status']) && $param['status'] == 1){  🎎 ['status'] = 1;

    } else if(isset($param['status']) && $param['status'] == 2){

        $where['status'] = 2;

    }lain{

        $di mana = benar;

    }

    $p = isset($param['p']) ? $param['p'] : 1;

    $db = Barang baharu();


    $pesanan = [

        'tambah_masa DESC',

 ;                                      DESC

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

    View::assign([

         'title'  => $title,

        'log masuk' => $log masuk, . ; $p,

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

html代码

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

<td>{$right_v.add_time}<

事件

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

國可调用模型的方法生效,使用查询构造器操作是无效的

Propertydescription
Suffix Data Jadual Suffix (lalai kosong)
Koneksi Database Connection (Konfigurasi Pangkalan Data Pembacaan Lalai)
Query Queries yang digunakan oleh model Nama kelas
medan Senarai medan (tatasusunan) yang model membenarkan penulisan
ketat Sama ada medan peka huruf besar-besaran (lalai adalah benar)
Tulis cap waktu yang dibuat dan dikemas kini secara automatik medan (lalai dimatikan)
Cipta medan cap masa
Kemas kini medan cap masa
digunakan untuk memadamkan masa anda lembut
Tambah sebelum AfterInsertSebelum Kemas Kiniselepas pemadaman
NomborAcaraPeneranganNama kaedah acara
1after_fread 2 sebelum_masukkan
padaSebelumMasukkan 3 after_insert
onAfterInsert4before_update
5 selepas_kemas kini Selepas kemas kinipadaAfterUpdate
6 sebelum_tulis sebelum menulispadaSebelumTulis
7 selepas_tulis selepas menulisonAfterWrite
8 sebelum_padam sebelum pemadaman padaSebelumPadam
9 selepas_padam selepas pemadamanselepas pemadaman
10 before_restore beforrestoreonBeforeRestore
11 after_restore 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;
    }
}