6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧

枢际劳虹馆麓概粮铆沛矢拔百

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第1张

1.打开Model类,复制如下代码:

D:\phpStudy\PHPTutorial\WWW\tp5\thinkphp\library\think\Model.php:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第2张

2.Staff.php

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第3张

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型
    protected $autoWriteTimestamp=true;
    // 创建时间字段
    protected $createTime = 'create_time';//名称可以修改为自己喜欢的如create_tm
    // 更新时间字段
    protected $updateTime = 'update_time';//名称可以修改为自己喜欢的如update_tm
}

在数据表staff中创建create_time,和update()字段

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第4张

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::create([
            'name'=>'武松'
        ]);
        if($result)
        {
            return $result->name."添加成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第5张

添加数据成功,此时在数据表中自动添加了创建时间戳和更新时间戳

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第6张

更新数据,将武松变为武大郎

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::update([
            'name'=>'武大郎'
        ],['id'=>34]);
        if($result)
        {
            return $result->name."更新成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第7张

此时update_time字段自动更新

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第8张


6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第9张

自动完成意思如:新增时只添加了name字段,其他没有手动添加的字段就可以使用自动完成

$auto可以看做是$insert和$uppdate的集合

复制Model类中的代码:

D:\phpStudy\PHPTutorial\WWW\tp5\thinkphp\library\think\Model.php:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第10张

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第11张

设置插入自动完成的操作

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型
    protected $autoWriteTimestamp=true;
    // 创建时间字段
    protected $createTime = 'create_time';//名称可以修改为自己喜欢的如create_tm
    // 更新时间字段
    protected $updateTime = 'update_time';//名称可以修改为自己喜欢的如update_tm

    // 保存自动完成列表
    protected $auto = [];
    // 新增自动完成列表
    protected $insert = [
        //在新增操作时,如果用户没有输入如下信息
        //则自动将性别设置为1,年龄设置为18,时间设置为2017-01-01
        //因为用户是不可能输入时间戳的所以自动的时间设置为2017-01-01
        'sex'=>1,
        'age'=>18,
        'hiredate'=>'2017-01-01'
    ];
    // 更新自动完成列表
    protected $update = [];

    //配置类型转换属性,将2017-01-01转换为时间戳
    protected $type=[
        'hiredate'=>'timestamp'
    ];
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::create([
            'name'=>'西门庆'
        ]);
        if($result)
        {
            return $result->name."添加成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第12张

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第13张


设置更新自动完成的操作

更新时,没有填部门,则设置默认部门为培训部

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\model\Staff.php:

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型
    protected $autoWriteTimestamp=true;
    // 创建时间字段
    protected $createTime = 'create_time';//名称可以修改为自己喜欢的如create_tm
    // 更新时间字段
    protected $updateTime = 'update_time';//名称可以修改为自己喜欢的如update_tm

    // 保存自动完成列表
    protected $auto = [];
    // 新增自动完成列表
    protected $insert = [
        //在新增操作时,如果用户没有输入如下信息
        //则自动将性别设置为1,年龄设置为18,时间设置为2017-01-01
        //因为用户是不可能输入时间戳的所以自动的时间设置为2017-01-01
        'sex'=>1,
        'age'=>18,
        'hiredate'=>'2017-01-01'
    ];
    // 更新自动完成列表
    protected $update = [
        'dept'=>'培训部'
    ];

    //配置类型转换属性,将2017-01-01转换为时间戳
    protected $type=[
        'hiredate'=>'timestamp'
    ];
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::update([
            'name'=>'西门庆'
        ],['id'=>35]);
        if($result)
        {
            return $result->name."更新成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第14张

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第15张


如果插入和更新时,有一些字段的值是相同的,不会发生变化,则可以在auto属性中进行配置

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\model\Staff.php:

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型
    protected $autoWriteTimestamp=true;
    // 创建时间字段
    protected $createTime = 'create_time';//名称可以修改为自己喜欢的如create_tm
    // 更新时间字段
    protected $updateTime = 'update_time';//名称可以修改为自己喜欢的如update_tm

    // 保存自动完成列表
    protected $auto = [
        //可以认为无论是新增还是更新操作年龄都是30
        'age'=>30
    ];
    // 新增自动完成列表
    protected $insert = [
        //在新增操作时,如果用户没有输入如下信息
        //则自动将性别设置为1,年龄设置为18,时间设置为2017-01-01
        //因为用户是不可能输入时间戳的所以自动的时间设置为2017-01-01
        'sex'=>1,
        'hiredate'=>'2017-01-01'
    ];
    // 更新自动完成列表
    protected $update = [
        'dept'=>'培训部'
    ];

    //配置类型转换属性,将2017-01-01转换为时间戳
    protected $type=[
        'hiredate'=>'timestamp'
    ];
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

更新操作触发auto属性

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::update([
            'name'=>'西门庆2号'
        ],['id'=>35]);
        if($result)
        {
            return $result->name."更新成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第16张

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第17张

新增操作触发属性auto自动完成

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::create([
            'name'=>'宋江'
        ]);
        if($result)
        {
            return $result->name."添加成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第18张

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第19张


实战

实现这样的预期:

如果公司新增的员工sex字段为0(女性),分配到客服部。sex字段为1(男性),分配到开发部。

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\model\Staff.php:

<?php
namespace app\index\model;
use think\Model;//引入Model类
class Staff extends Model
{
    // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型
    protected $autoWriteTimestamp=true;
    // 创建时间字段
    protected $createTime = 'create_time';//名称可以修改为自己喜欢的如create_tm
    // 更新时间字段
    protected $updateTime = 'update_time';//名称可以修改为自己喜欢的如update_tm

    // 保存自动完成列表
    protected $auto = [
        //可以认为无论是新增还是更新操作年龄都是30
        'age'=>30
    ];
    // 新增自动完成列表
    protected $insert = [
        'dept',//保持为空,部门名称,根据员工性别sex字段的值确定
        //需要在下方为dept创建修改器
        'hiredate'=>'2017-01-01'
    ];
    // 更新自动完成列表
    protected $update = [
        'dept'=>'培训部'
    ];

    //配置类型转换属性,将2017-01-01转换为时间戳
    protected $type=[
        'hiredate'=>'timestamp'
    ];
    //为dept设置修改器
    protected function setDeptAttr($dept,$data)
    {
        if($data['sex']==1)
        {
            return $this->dept='开发部';
        }
        else
        {
            return $this->dept='客服部';
        }
    }
}

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

添加sex=0的李师师

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::create([
            'name'=>'李师师',
            'sex'=>0
        ]);
        if($result)
        {
            return $result->name."添加成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第20张

添加sex=1的燕青

D:\phpStudy\PHPTutorial\WWW\tp5\application\index\controller\Index.php:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $result=Staff::create([
            'name'=>'燕青',
            'sex'=>1
        ]);
        if($result)
        {
            return $result->name."添加成功";
        }
        else
        {
            $result->getError();
        }
    }
}

执行:

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第21张

6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第22张


6-16ThinkPHP5模型数据自动完成设置:$insert/$update/$auto属性配置技巧第23张


疲恒币咕品破念钳峭姜截凄额