thinkphp5 模型使用

小周 2020-04-25

模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写。

namespace app\index\model;

设置数据表

use think\Model;
class User extends Model{
    // 设置当前模型对应的完整数据表名称
protected $table = ‘think_user‘;
// 主键默认是自动识别的,如果需要指定
protected $pk = ‘uid‘;
}

模型调用

// 实例化模型
$user = new User;
$user->name= ‘thinkphp‘;
$user->save();
// 或者使用助手函数`model`
$user = model(‘User‘);
$user->name= ‘thinkphp‘;
$user->save();

模型的初始化是重写Model的initialize

//自定义初始化
    protected function initialize()
    {
        //需要调用`Model`的`initialize`方法
        parent::initialize();
 }

新增

$user           = new User;
$user->name     = ‘thinkphp‘;
$user->email    = ‘‘;
$user->save();

也可以使用data方法批量赋值:

$user = new User;
$user->data([
    ‘name‘  =>  ‘thinkphp‘,
    ‘email‘ =>  ‘‘]);
$user->save();

添加多条数据

$user = new User;
$list = [
    [‘name‘=>‘thinkphp‘,‘email‘=>‘‘],
    [‘name‘=>‘onethink‘,‘email‘=>‘‘]];
$user->saveAll($list);

saveAll方法新增数据默认会自动识别数据是需要新增还是更新操作,当数据中存在主键的时候会认为是更新操作;

查找并更新

$user = User::get(1);
$user->name     = ‘thinkphp‘;
$user->email    = ‘‘;
$user->save();

直接更新数据

$user = new User;// save方法第二个参数为更新条件
$user->save([
    ‘name‘  => ‘thinkphp‘,
‘email‘ => ‘‘]
,[‘id‘ => 1]);

静态方法

User::where(‘id‘, 1)
    ->update([‘name‘ => ‘thinkphp‘]);

或者使用:

User::update([‘id‘ => 1, ‘name‘ => ‘thinkphp‘]);

删除模型数据,可以在实例化后调用delete方法。

$user = User::get(1);
$user->delete();

或者通过数据库类的查询条件删除

User::where(‘id‘,‘>‘,10)->delete();

查询

获取单个数据

取出主键为1的数据
$user = User::get(1);
echo $user->name;

或者在实例化模型后调用查询方法

$user = new User();// 查询单个数据
$user->where(‘name‘, ‘thinkphp‘)
    ->find();

在实例化模型后调用查询方法

$user = new User();// 查询数据集
$user->where(‘name‘, ‘thinkphp‘)
    ->limit(10)
    ->order(‘id‘, ‘desc‘)
    ->select();

聚合

$user = new User;
$user->count();
$user->where(‘status‘,‘>‘,0)->count();
$user->where(‘status‘,1)->avg(‘score‘);
$user->max(‘score‘);

获取器

获取器的作用是在获取数据的字段值后自动进行处理,例如,我们需要对状态值进行转换,可以使用:

class User extends Model {
    public function getStatusAttr($value)
    {
        $status = [-1=>‘删除‘,0=>‘禁用‘,1=>‘正常‘,2=>‘待审核‘];
        return $status[$value];
    }}

数据表的字段会自动转换为驼峰法,一般status字段的值采用数值类型,我们可以通过获取器定义,自动转换为字符串描述。

获取器还可以定义数据表中不存在的字段,例如:

class User extends Model {
    public function getStatusTextAttr($value,$data)
    {
        $status = [-1=>‘删除‘,0=>‘禁用‘,1=>‘正常‘,2=>‘待审核‘];
        return $status[$data[‘status‘]];
    }}

获取器方法的第二个参数传入的是当前的所有数据数组。

相关推荐