tp6Day4--模型的增删改查

102 阅读2分钟

1.模型定义

<?php
namespace app\model;

use think\Model;

class User extends Model
{
    //protected $connection = 'demo';//指定数据库连接
    //protected $name = 'user';//指定数据表
    //protected $table = 'tp_user';//指定表
    //protected $pk = 'uid';//默认主键为 id,你可以设置其它主键,比如 uid

    protected static function init()
    {
        //第一次实例化的时候执行init
        echo '初始化User模型';
    }
}
DataModel 控制器
<?php

namespace app\controller;

use app\model\User;

class DataModel
{
    public function index()
    {
        User::select();
    }
}

2.模型的新增和删除

新增数据

public function modelSave()
    {
        $user = new User();
        //新增方式1 ->save();
//        $user->username = '李白';
//        $user->password = '123456';
//        $user->gender = '男';
//        $user->email = 'libai@163.com';
//        $user->price = 8594.5;
//        $user->details = 'hahaha';
//        $user->uid = 1011;
//        $user->save();
//        echo $user->id;
        //新增方式2 也可以通过 save()传递数据数组的方式,来新增数据
//        $user->replace()->save([
//            'username'=>'杜甫',
//            'password'=>'123111',
//            'gender'=>'男',
//            'email'=>'dufu@163.com',
//            'price'=>100,
//            'details'=>'789465',
//            'uid'=>111
//        ]);
        //允许要写入的字段,其它字段就无法写入了
        //$user->allowField(['username','email','password','details'])->save();
        //新增方式3 saveAll 批量新增
//        $dataAll = [
//            [ 'username' => '李白1', 'password' => '123', 'gender' => '男', 'email' => 'libai@163.com', 'price' => 100, 'details' => '123', 'uid' => 1011 ],
//            [ 'username' => '李白2', 'password' => '123', 'gender' => '男', 'email' => 'libai@163.com', 'price' => 100, 'details' => '123', 'uid' => 1011 ]
//        ];
//        $user->saveAll($dataAll);
//
//        //使用::create()静态方法,来创建要新增的数据;
//        //参数 1 是新增数据数组,必选
//        //参数 2 是允许写入的字段,可选
//        //参数 3 为是否 replace 写入,默认 false 为 Insert 写入
//        $user = User::create(
//            [ 'username' => '李白', 'password' => '123', 'gender' => '男', 'email' => 'libai@163.com', 'price' => 100, 'details' => '123', 'uid' => 1011 ],
//            ['username', 'password', 'details'], false);
    }

删除数据

public function delete()
{
    //主键id查询,再执行删除
    $user = User::find(309);
    $user->delete();

    //静态方法调用 destroy()方法,通过主键(id)删除数据
    User::destroy(308);

    //通过数据库类的查询条件删除
    User::where('id','>',100)->delete();

    //闭包删除
    User::destroy(function ($query){
        $query->where('id','>',100);
    });
}

3.模型数据更新

public function update()
{
    //find获取后更新
    $user = User::find(251);
    $user->username = '李黑';
    $user->save();

    //通过 where()方法结合 find()方法的查询条件获取的数据,进行修改;
    $user = User::where('username', '李黑')->find();
    $user->username = '李白';
    $user->email = 'libai@163.com';
    $user->save();
    $user->force()->save();//强制更新数据

    //使用 allowField()方法,允许要更新的字段,其它字段就无法写入了
    $user->allowField(['username','email'])->save();

    //saveAll批量修改数据
    $user = new User();
    $list = [ ['id'=>118, 'username'=>'李白', 'email'=>'libai@163.com'], ['id'=>128, 'username'=>'李白', 'email'=>'libai@163.com'], ['id'=>129, 'username'=>'李白', 'email'=>'libai@163.com'] ];
    $user->saveAll($list);

    //使用静态方法::update()更新,返回的是对象实例;

    //1
    User::update(
      ['id' => 118, 'username' => '李黑']
    );
    //2
    User::update([ 'username' => '李黑', 'email' => 'lihei@163.com' ],['id'=>118]);
    //3
    User::update([
        'username' => '李黑', 'email' => 'lihei@163.com'
    ], ['id'=>118], ['username']); //只更新 username
}

4.模型数据查询

public function getData()
{
    //1.find主键id
    $user = User::find(129);
    return json($user);

    //2.以使用 where()方法进行条件筛选查询数据
    $user = User::where('username','李黑')->find();
    return json($user);

    //3.数据不存在返回空模型
    $user = UserModel::findOrEmpty(1111);
    if ($user->isEmpty()) { echo '空模型,无数据!'; }

    //4.使用 select([])方式,查询多条指定 id 的字段,不指定就是所有字段
    $user = User::select([19,20,21]);
    foreach ($user as $item) {
        echo $item->username;
    }

    //5.模型方法也可以使用 where 等连缀查询,和数据库查询方式一样
    $user = User::where('status', 1)
        ->limit(5)
        ->order('id', 'desc')
        ->select();

    //6.获取某个字段 value()或者某个列 column()的值
    User::where('id', 79)->value('username');
    User::whereIn('id',[79,118,128])->column('username','id');

    //7.模型支持动态查询:getBy*,*表示字段名
    UserModel::getByUsername('辉夜');
    UserModel::getByEmail('huiye@163.com');

    //8. 模型支持聚合查询:max、min、sum、count、avg 等;
    User::max('price');

    //9.使用 chunk()方法可以分批处理数据,数据库查询时讲过,防止一次性开销过大;
    User::chunk(5, function ($users)
    {
        foreach($users as $user) {
            echo $user->username;
        }
        echo '<br>------<br>';
    });

    //10.可以利用游标查询功能,可以大幅度减少海量数据的内存开销,它利用了 PHP 生 成器特性。每次查询只读一行,然后再读取时,自动定位到下一行继续读取;
    foreach (User::where('status', 1)->cursor() as $user) {
        echo $user->username; echo '<br>------<br>';
    }
}