thinkphp模型操作数据库

1.定义


<?php

namespace app\index\model;

use think\Model;

/**

* 一般数据模型都是和表名一致

*/

class User extends Model{   }

2.一般model的名字和表名是对应的,例如

表名 pre_user -> 模型名 User.php

表名 pre_user_info -> 模型名 UserInfo.php

3.表名和数据模型定义名不一致需要额外定义


class User extends Model

{

// 设置相关的数据表

protected $table = "admin_user";

}

4.种调用模型的方法

//先导入定义的数据模型类

use \app\index\model\User;

(1) $res = User::get(1)

(2) $user = new User;

res =user::get(1);

(3) use think\Loader;

$user = Loader::model("User");

res =user::get(1);

(4) $user = model("User);

res =user::get(1);

查询

get 获取一条记录


$res = Student::get(1);

all 获取多条记录


$res = Student::all('1, 2, 3');

$res = Student::all([1, 2, 3]);

find 查询某一条


$res = Student::where('id', '=', '1')

->field('name')

->find();

select 多条查询


$res = Student::where('id', '>=', '1')

    ->field('name')

    ->limit(2)

    ->order('id DESC')

    ->select();

value 按字段查询一条


$res = Student::where('id', '>=', '1')

    ->value('name');

注: res =res->toArray();//将结果转换成数组

查询数目


# count sum avg max min

$res = Student::count();

$res = Student::where('id', '>', 3)

    ->count();

添加

简单的添加


$res = Student::create([

    'name'      => 'tom',

    'age'      => 23,

    'sex'      => 2,

    'password'  => '123457'

]);

实例化方式

$student = new Student;

$student->name =  '王大锤';

$student->age =  23;

$student->save();

实例化方式过滤插入字段,返回插入行数

$student = new Student;

$data = [

    'name' => '王大锤',

    'age' => 23,

    'email' => '123456@qq.com'

];

$res = $student->allowField(['name', 'age'])

    ->save($data);

saveAll添加多条数据 返回对象列表

$student = new Student;

$data = [

    [

        'name' => '王大锤',

        'age' => 23,

        'email' => '123456@qq.com'

    ],

    [

        'name' => '王二锤',

        'age' => 23,

        'email' => '123456@qq.com'

    ]

];

$res = $student->allowField(['name', 'age'])

    ->saveAll($data);

更新

update 返回影响行数 (推荐)

$res = Student::where(['id'=>5])

    ->update([

        'name'=>'Jack'

    ]);



  // score 字段加 5

Student::where(['id'=>5])->setInc('score', 5);

// score 字段减 5

Student::where(['id'=>5])->setDec('score',5);

批量更新 数据中要含有主键,返回更新对象列表

$student = new Student;

$res = $student->saveAll([

    ['id'=>1, 'name' => 'MIMI'],

    ['id'=>2, 'name' => 'MIMI']

]);

删除

传入主键,返回影响行数

$res = Student::destroy(1);

传入条件,返回影响行数

$res = Student::destroy(['id'=>2]);

条件删除 返回影响行数

$res = Student::where(['id'=>5])

->delete();

事务回滚

(1)自动控制事务处理

Db::transaction(function(){

Db::table('think_user')->find(1);

Db::table('think_user')->delete(1);

});

(2)手动控制事务

Db::startTrans();   //启动事务

try {

AgentSetting::where('id',$id)->setInc('number',1);

Db::commit();   //提交事务

} catch (Exception $e) {

Db::rollback(); //回滚

return json(['code'=>'0','error'=>$e->getMessage()]);

}

模型修改器和自动完成

auto (新增及更新的时候自动完成的属性数组)

insert(仅新增的时候自动完成的属性数组)

update(仅更新的时候自动完成的属性数组)

读取器的命名规范是 -> get + 属性名的驼峰命名 + Attr

修改器的命名规范是 -> set + 属性名的驼峰命名 + Attr

  1. 定义
<?php

namespace app\index\model;

use think\Model;

class Student extends Model

{

    # 新增及更新 自动完成

    protected $auto = ['sex'];

    # 新增 自动完成

    protected $insert = ['insert_time'];

    # 更新 自动完成

    protected $update = ['update_time'];

    # 获取器

    public function getSexAttr($val)

    {

        switch ($val) {

            case 1:

                return '男';

            case 2:

                return '女';

            default:

                return '未知';

        }

    }

    # 修改器

    public function setTimeAttr()

    {

        return time();

    }

    public function setInsertTimeAttr()

    {

        return time();

    }

}
  1. 调用
$res = Student::create([

    'name'      => 'tom',

    'age'      => 23,

    'sex'      => 2,

    'password'  => '123457'

]);

自动更新时间

在数据库配置文件中设置

// 自动写入时间戳字段

'auto_timestamp'  => true,

自动操作字段

Model中设置

# 默认字段update_time create_time

protected $autoWriteTimestamp = True;  // 开启自动时间戳

protected $createTime = 'create_time'; // 可自定义时间字段名

protected $updateTime = 'update_time'; // 关闭 false

注:当创建和更新数据时,数据的create_time和update_time字段会被写入操作的时间

软删除

在数据库配置文件中设置

// 自动写入时间戳字段

'auto_timestamp'  => true,

开启软删除

<?php

namespace app\index\model;

use think\Model;

use traits\model\SoftDelete;

class Student extends Model

{

    use SoftDelete;

    protected $deleteTime = 'delete_time';

}

调用

Student::where(['id'=>5])->delete();//软删除

Student::where(['id'=>5])->delete(true);//真正删除

查询已软删除的数据

$res = Student::withTrashed(true)->find(1);

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

$res = Student::onlyTrashed()->select();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 10,339评论 0 1
  • Yii提供了强大的数据库编程支持。Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上...
    layjoy阅读 7,486评论 0 6
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 9,241评论 0 8
  • 1 获得模型 先定义模型 User User::get(1);//获得id=1的User $user2=new U...
    _乐哥_阅读 4,212评论 0 0
  • 今天上午,有同事在办公室打电话! 他打电话很有特点:声音很大,并且时间还长。同办公室的人打电话,一般都是要么声音放...
    陌上花开qzy阅读 2,656评论 0 0