Rumah > rangka kerja php > ThinkPHP > teks badan

Sebuah artikel menerangkan secara terperinci cara menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5

青灯夜游
Lepaskan: 2022-03-10 11:33:52
ke hadapan
3589 orang telah melayarinya

Bagaimana untuk mengendalikan pangkalan data dalam Thinkphp5 dan melakukan penambahan, pemadaman, pengubahsuaian dan pertanyaan? Artikel berikut akan memberi anda pemahaman terperinci tentang kaedah menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5 saya harap ia akan membantu anda!

Sebuah artikel menerangkan secara terperinci cara menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5

thinkphp reka bentuk jadual data standard:

Buat medan masa: create_time

Kemas kini medan masa :update_time

Padam medan masa: delete_time

Pilih int sebagai jenis, seperti yang ditunjukkan di bawah:

Sebuah artikel menerangkan secara terperinci cara menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5

[Tutorial berkaitan cadangan:rangka kerja thinkphp]

1 Cipta folder model

Buat folder baharu bernama model dalam direktori objek kedua di bawah folder aplikasi sebagai Pengawal dan direktori paparan yang sepadan berada pada tahap yang sama, seperti yang ditunjukkan di bawah:

Sebuah artikel menerangkan secara terperinci cara menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5

Jika terdapat berbilang modul (seperti indeks bahagian hadapan, pentadbir bahagian belakang) dan pangkalan data yang mereka kendalikan adalah serupa, maka anda boleh Model model diletakkan dalam modul awam biasa, seperti berikut:

Sebuah artikel menerangkan secara terperinci cara menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5

2. Buat kelas model model

1. Cipta fail objek model dalam direktori model, secara amnya Nama model sepadan dengan nama jadual, contohnya:

表名 pre_user       --------------->  模型名 User.php
表名 pre_user_info  --------------->  模型名 UserInfo.php
Salin selepas log masuk

2. Tentukan model

<?php
namespace app\index\model;
use think\Model;
use think\Db;

class User extends Model{
	/**
     * 定义变量
     * 1.变量名称应与数据表中的字段名相同
     * 2.此处可根据需求省略,因为如果没有,thinkphp会自动在数据表中寻找的对应字段名
     */
	public $username;
	public $password;
}
?>
Salin selepas log masuk

3. Jika nama definisi model data tidak konsisten dengan nama jadual, maka tambahan Definisi dan pengisytiharan adalah seperti berikut:

<?php
namespace app\index\model;
use think\Model;
use think\Db;

class User extends Model
{
	protected $table = "admin_user";//指定数据表名
    protected $pk = &#39;id&#39;;           //指定主键的字段
}
?>
Salin selepas log masuk

3 Kaedah memanggil model model

//导入定义的数据模型类
use \app\index\model\User;

//方法一:
$res = User::get(1);

//方法二:
$user = new User;
$res = $user::get(1);	

//方法三:
use think\Loader;
$user = Loader::model("User");
$res = $user::get(1);

//方法四:
$user = model("User");       
$res = $user::get(1);
Salin selepas log masuk

4. Operasi pertanyaan

dapatkan Dapatkan rekod

$res = User::get(1);
Salin selepas log masuk

semua Dapatkan berbilang rekod

1. Tiada parameter diluluskan

$result = User::all(); //查询出所有记录
Salin selepas log masuk

2 Parameter ialah n, n ialah Integer positif

$result = User::all(1); //查询出id为1的记录
Salin selepas log masuk

3, parameter ialah 'n1, n2, n3...'

$result = User::all(&#39;7, 8, 9, 10&#39;); //查询出id为7、8、9、10的4条记录
Salin selepas log masuk

4, parameter ialah [n1, n2, n3...]

$result = User::all([7, 8, 9, 10]); //查询出id为7、8、9、10的4条记录
Salin selepas log masuk

cari pertanyaan item tertentu

 $res = User::where(&#39;id&#39;,&#39;1&#39;)->field(&#39;name&#39;)->find();
Salin selepas log masuk

tidak sama dengan

->where('id','neq',1 )

pilih berbilang pertanyaan

$res = User::where(&#39;id&#39;,&#39;1&#39;)->field(&#39;name&#39;)->limit(2)->order(&#39;id DESC&#39;)->select();
Salin selepas log masuk

pertanyaan nilai satu demi medan

$res = User::where(&#39;id&#39;,&#39;1&#39;)->value(&#39;name&#39;);
Salin selepas log masuk

Tukar hasil ke dalam tatasusunan

$res = $res->toArray();
Salin selepas log masuk

Nombor pertanyaan

//查询总条数
$res = User::count();
//按条件统计条数
$res = User::where(&#39;id&#39;,&#39;>&#39;,3)->count();
Salin selepas log masuk

pertanyaan keadaan masa whereTime()

1 Dapatkan maklumat hari ini

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;today&#39;)->select();
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;d&#39;)->select();
Salin selepas log masuk

2. Dapatkan maklumat semalam

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;yesterday&#39;)->select();
Salin selepas log masuk
<. 🎜> 3. Dapatkan maklumat minggu ini

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;week&#39;)->select();   
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;w&#39;)->select();
Salin selepas log masuk
4. Dapatkan Maklumat maklumat bulan ini

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;month&#39;)->select();   
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;m&#39;)->select();
Salin selepas log masuk
5. Dapatkan maklumat bulan lepas

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;,&#39;last month&#39;)->select();
Salin selepas log masuk
6. Dapatkan maklumat tahun ini

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;year&#39;)->select();    
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;y&#39;)->select();
Salin selepas log masuk
7. Dapatkan maklumat tahun lepas

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;,&#39;last year&#39;)->select();
Salin selepas log masuk
8 Pertanyaan julat tarikh

//根据时间戳查询今天到后天
db(&#39;table&#39;)->whereTime(&#39;time&#39;, &#39;between&#39;, [strtotime(date(&#39;Y-m-d&#39;)), strtotime(date(&#39;Y-m-d&#39;, strtotime(&#39;+2 day&#39;)))])->select();
根据日期查询今天到后天
db(&#39;table&#39;)->whereTime(&#39;time&#39;, &#39;between&#39;, [&#39;2020-3-28&#39;, &#39;2020-3-30&#39;])->select();
Salin selepas log masuk
Tambah operasi

1. Gunakan kaedah create() untuk menambah

$res = User::create([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ]);
Salin selepas log masuk
2, dan kembalikan kunci utama yang ditambahkan

$uid=UserModel::create([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ])->id;
Salin selepas log masuk
Anda juga boleh menggunakan kaedah insertGetId. Kelas DB, seperti berikut:

$uid = User::insertGetId([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ]);
Salin selepas log masuk
3. Tambah mengikut instantiasi

 $user = new User;
 $user->name =  &#39;安阳&#39;;
 $user->age =  23;
 $user->save();
Salin selepas log masuk
4 Kaedah instantiation menapis medan yang dimasukkan dan mengembalikan bilangan baris yang dimasukkan

<🎜. >

5. Model menggunakan allowField() untuk menapis data medan jadual bukan data
 $user = new User;
 $data = [
     &#39;name&#39; => &#39;安阳&#39;,
     &#39;age&#39; => 23,
     &#39;email&#39; => &#39;123456@qq.com&#39;
 ];
 //只有name和age字段会写入
 $res = $user->allowField([&#39;name&#39;, &#39;age&#39;])->save($data);
Salin selepas log masuk

6. Model menggunakan allowField() menentukan medan tertentu untuk ditulis ke dalam
//定义模型对象,并传入post数据
$user = new User($_POST);
//过滤post数组中的非数据表字段数据
$user->allowField(true)->save();
Salin selepas log masuk

7. Untuk menambah kelompok, gunakan saveAll()
$user = new User;
// post数组中只有name和email字段会写入
$user->allowField([&#39;name&#39;,&#39;email&#39;])->save($_POST, [&#39;id&#39; => 1]);
Salin selepas log masuk

Anda juga boleh menggunakan kaedah insertAll() kelas DB untuk mengembalikan bilangan item
user = new User;
$list = [
    [&#39;name&#39;=>&#39;安阳&#39;,&#39;email&#39;=>&#39;thinkphp@qq.com&#39;],
    [&#39;name&#39;=>&#39;小柒&#39;,&#39;email&#39;=>&#39;12345678@qq.com&#39;]
 ];
$user->saveAll($list);
Salin selepas log masuk

$res = User::insertAll([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ]);
Salin selepas log masuk
Tambahan, kaedah penapisan lain:

1 Dalam operasi DB, anda boleh menggunakan ketat untuk mematikan semakan medan yang ketat

<🎜. >

2. Gunakan kaedah php unset() untuk memusnahkan pembolehubah

Db::name(‘user’)->strict(false)->insert($data);
Salin selepas log masuk

6. . Operasi kemas kini
unset($data[‘file’]);
Salin selepas log masuk
1 kemas kini mengembalikan bilangan baris yang terjejas

 $user = new User;
 $data = [
     [
         &#39;name&#39; => &#39;安阳&#39;,
         &#39;age&#39; => 20,
         &#39;email&#39; => &#39;123456@qq.com&#39;
     ],
     [
         &#39;name&#39; => &#39;小柒&#39;,
         &#39;age&#39; => 25,
         &#39;email&#39; => &#39;ap555@qq.com&#39;
     ]
 ];
 $res = $user->allowField([&#39;name&#39;, &#39;age&#39;])->saveAll($data);
Salin selepas log masuk
2 setField mengemas kini medan secara individu

3 🎜>

4. setDec
 $res = User::where([&#39;id&#39;=>1])->update([&#39;name&#39;=>&#39;安阳&#39;]);
Salin selepas log masuk

5. Kemas kini kumpulan memerlukan data mengandungi kunci utama dan mengembalikan senarai objek kemas kini
User::where(&#39;id&#39;,1)->setField(&#39;name&#39;,&#39;安阳&#39;);
Salin selepas log masuk

7 >
//setInc(&#39;money&#39;,10)表示将money字段加上10
User::where([&#39;id&#39;=>1])->setInc(&#39;money&#39;, 10);
Salin selepas log masuk
1. Lulus dalam kunci utama dan kembalikan bilangan baris yang terjejas

//setDec(&#39;money&#39;,10)表示将money字段减去10
User::where([&#39;id&#39;=>1])->setDec(&#39;money&#39;, 10);
Salin selepas log masuk
2. Lulus dalam keadaan dan kembalikan bilangan baris yang terjejas

$user = new User;
$res = $user->saveAll([
     [&#39;id&#39;=>1, &#39;name&#39; => &#39;安阳&#39;],
     [&#39;id&#39;=>2, &#39;name&#39; => &#39;小柒&#39;]
 ]);
Salin selepas log masuk
3. . Pemadaman bersyarat mengembalikan bilangan baris yang terjejas

8 Transaksi

$res = User::destroy(1);
Salin selepas log masuk
1 Kawal urus niaga secara automatik

 $res = User::destroy([&#39;name&#39;=>&#39;安阳&#39;]);
Salin selepas log masuk
2

9. Dapatkan model model Konvensyen penamaan pembaca
 $res = User::where([&#39;id&#39;=>1])->delete();
Salin selepas log masuk

ialah:

->dapatkan penamaan kes unta bagi nama atribut Attr

Db::transaction(function(){ 
    Db::table(&#39;order&#39;)->where([&#39;id&#39;=>1])->delete(); 
	Db::table(&#39;user&#39;)->where(&#39;id&#39;=>1)->setInc(&#39;money&#39;,10);	
});
Salin selepas log masuk

Db::startTrans();//启动事务
try {
    Order::where([&#39;id&#39;=>1])->delete();
	User::where(&#39;id&#39;=>1)->setInc(&#39;money&#39;,10);
	Db::commit();//提交事务
} catch (Exception $e) {
	Db::rollback();	//回滚
}
Salin selepas log masuk
Penjelasan tambahan: strtotime () Menghuraikan perihalan tarikh dan masa mana-mana teks bahasa Inggeris ke dalam cap waktu Unix, dan kembalikan cap masa jika berjaya, jika tidak, kembalikan FALSE (sebelum PHP 5.1.0, fungsi ini dikembalikan -1 pada kegagalan)

十、model模型的修改器

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	//修改器
	public function setTimeAttr()
	{
        return time();
	}
    /** 修改器:对密码字段加密之后存储
     * $val  第一个参数是密码
     * $data 第二个参数是添加的数据(可选)
     */
    public function setPasswordAttr($val,$data){
        if($val === &#39;&#39;) {
            return $val;
        }else{
            return md5($val.$data[&#39;email&#39;]);
        }
    }
}
Salin selepas log masuk

十一、model模型的自动完成

auto 新增及更新的时候,自动完成的属性数组
insert 仅新增的时候,自动完成的属性数组
update 仅更新的时候,自动完成的属性数组

1、自动完成

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	//添加和修改时,都会自动完成的字段
    protected $auto = [&#39;addtime&#39;];

    public function setAddtimeAttr(){
        return time();
    }
}
Salin selepas log masuk

2、添加数据时,自动完成

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	// 新增 自动完成
    protected $insert = [&#39;addtime&#39;];

    public function setAddtimeAttr(){
        return time();
    }
}
Salin selepas log masuk

3、更新数据时,自动完成:

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	// 更新 自动完成
    protected $update = [&#39;addtime&#39;];

    public function setAddtimeAttr(){
        return time();
    }
}
Salin selepas log masuk

十二、自动完成时间戳

在数据库配置文件database.php中,有下列这项配置:

//自动写入时间戳字段
&#39;auto_timestamp&#39;  => false,
//如果开启(设置为true),则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。
Salin selepas log masuk

例如对用户表的时间戳自动完成,就在User的model中设置:

<?php
namespace app\index\model;
use think\Model;

class User extends Model{
    //开启自动完成时间戳功能
    protected $autoWriteTimestamp = true;
    //开启后,
    //添加数据时,默认自动完成的字段是:create_time和update_time
    //修改数据时,默认自动完成的字段是:update_time
    
    //如果数据表里不是这两个字段,则会报错。需要进行如下修改:
    protected $createTime = &#39;addtime&#39;;//修改默认的添加时间字段
    protected $updateTime = &#39;updtime&#39;;//修改默认的修改时间字段
    protected $updateTime = false;//当不需要这个字段时设置为false
}
Salin selepas log masuk

Thinkphp更新时,自动更新update_time字段时间戳的方法:

1、使用update

User::update([&#39;name&#39;=>&#39;安阳&#39;],[&#39;id&#39;=>1]);
Salin selepas log masuk

Thinkphp中update方法的源代码如下:

/**
    * 更新数据
    * @access public
    * @param array      $data  数据数组
    * @param array      $where 更新条件
    * @param array|true $field 允许字段
    * @return $this
    */
   public static function update($data = [], $where = [], $field = null)
   {
       $model = new static();
       if (!empty($field)) {
           $model->allowField($field);
       }
       $result = $model->isUpdate(true)->save($data, $where);
       return $model;
   }
Salin selepas log masuk

2、使用save

$user=new User;
$user->isUpdate(true)->save([&#39;name&#39;=>&#39;安阳&#39;],[&#39;id&#39;=>1]);
Salin selepas log masuk

十三、软删除

什么是软删除?

当删除某些记录时,有时我们需要假删除,只通过修改某个字段状态来标记该记录已删除,但实际上,数据库中还是存在这些记录的。假删除的应用场景还是比较多的,例如支付宝的收款记录,我们在APP上删除后,就不会再显示出来,你是不是以为真的删掉了,不会再留下任何痕迹?非也,非也,删除支付宝收款记录只是软删除,在支付宝的数据库中,实际上还保留有这些收款记录,如果你的收款涉嫌违规或者触犯法律,警方还是能通过支付宝的网警后台查看到的。

1、开启软删除

<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;//引入软删除的类

class Order extends Model{
    //使用软删除
    //删除时,默认更新的字段是delete_time
    use SoftDelete;
    //如果数据表里不是delete_time这个字段,则会报错。需要进行如下修改:
    protected $deleteTime = &#39;deltime&#39;;
}
Salin selepas log masuk

2、 控制器里软删除,返回影响的行数

 $res = Order::destroy(1);
Salin selepas log masuk

执行删除后,就会更新delete_time字段,如果update_time字段也开启了自动完成,也会更新update_time字段。

3、如果开启了软删除,需要真正地删除数据,而不做软删除,用下面的方法

//destory()第二个参数传递true
$res = Order::destroy(1,true);

//delete()参数传递true
$orderData = Order::get(1);
$orderData ->delete(true);
Salin selepas log masuk

4、查询已软删除的数据

$res = Order::withTrashed(true)->find(1);
Salin selepas log masuk

5、查询仅包含已软删除的数据

$res = Order::onlyTrashed()->select();
Salin selepas log masuk

推荐学习:《PHP视频教程

Atas ialah kandungan terperinci Sebuah artikel menerangkan secara terperinci cara menambah, memadam, mengubah suai dan menanyakan pangkalan data dalam Thinkphp5. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!