PHP教程

thinkphp5-模型

本文主要是介绍thinkphp5-模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基本用法

命令行生成User模型

php think make:model index/User

模型调用

$user = new \app\index\model\User();
$user = $user->where('id',3)->find();
var_dump($user->toArray());
$user = model('user')->where('id',3)->find();
var_dump($user->toArray());

添加数据

添加一条数据

$user         = new \app\index\model\User();
$user->name   = 'huyongjian11';
$user->status = 1;
$user->save();

添加多条数据

$user           = model('user');
$list = [
    ['name'=>'胡勇健1','status'=>1],
    ['name'=>'胡勇健2','status'=>0]
];
$user->saveAll($list);

更新数据

$user = model('user')->where('id',5)->find();
$user->name = '胡勇健';
$user->save();

删除数据

$user = model('user')->where('id',5)->find();
$user->delete();

获取数据

$user = model('user')->get(6);
$user = model('user')->where('id',5)->find();
$users=model('user')->where('id','>',6)->select();
foreach ($users as $user){
    dump($user->toArray());
}

聚合查询

model('user')->count();
model('user')->max('id');
model('user')->min('id');
model('user')->avg('id');
model('user')->sum('id');

获取器

User模型

<?php

namespace app\index\model;

use think\Model;

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

控制器

$user = model('user')->where('id',6)->find();
var_dump($user->status);

修改器

User模型

public function setNameAttr($value)
    {
        return strtolower($value);
    }

控制器

$user = model('user')->where('id',6)->find();
$user->name = 'HUYONGJIAN';
$user->save();

时间戳

User模型

protected $autoWriteTimestamp = true;
protected $autoWriteTimestamp = 'datetime';
// 定义时间戳字段名
protected $createTime = 'create_at';
protected $updateTime = 'update_at';

模型分层

  • 数据层:app\index\model\User 用于定义数据相关的自动验证和自动完成和数据存取接口
  • 逻辑层:app\index\logic\User 用于定义用户相关的业务逻辑
  • 服务层:app\index\service\User 用于定义用户相关的服务接口等

三个模型层的定义如下:

app\index\model\User.php

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
}

实例化方法:\think\Loader::model('User')

Logic类:app\index\logic\User.php

<?php
namespace app\index\logic;

use think\Model;

class User extends Model
{
}

实例化方法:\think\Loader::model('User','logic');

Service类:app\index\service\User.php

<?php
namespace app\index\service;

use think\Model;

class User extends Model
{
}

实例化方法:\think\Loader::model('User','service');

模型数据转换

$user->toArray();
$user->toJson();

模型事件

User模型

<?php

namespace app\index\model;

use think\Model;

class User extends Model
{
    //初始化
    protected function initialize()
    {
        parent::initialize();
        self::event('before_update', function ($user) {
            //事件处理
        });
    }
}
标签位    描述
before_insert    新增前
after_insert    新增后
before_update    更新前
after_update    更新后
before_write    写入前
after_write    写入后
before_delete    删除前
after_delete    删除后

快捷注册

User::beforeInsert(function ($user) {
    if ($user->status != 1) {
        return false;
    }
});
标签位    描述
beforeInsert    新增前
afterInsert    新增后
beforeUpdate    更新前
afterUpdate    更新后
beforeWrite    写入前
afterWrite    写入后
beforeDelete    删除前
afterDelete    删除后

模型关联

一对一关联

hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型');

用法

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
    public function profile()
    {
        //return $this->>hasOne('Profile');
        return $this->hasOne('Profile','user_id','id');
    }
}

一对多关联

hasMany('关联模型名','外键名','主键名',['模型别名定义']);

用法

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
    public function comments(){
        //return $this->hasMany('comment');
        return $this->hasMany('comment','user_id','id');
    }
}
这篇关于thinkphp5-模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!