Thinkphp快速入门(四)

操作数据库

配置连接信息

config/database.php


return [
    // 默认使用的数据库连接配置
    'default'         => env('database.driver', 'mysql'),

    // 自定义时间查询规则
    'time_query_rule' => [],

    // 自动写入时间戳字段
    // true为自动识别类型 false关闭
    // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
    'auto_timestamp'  => true,

    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',

    // 时间字段配置 配置格式:create_time,update_time
    'datetime_field'  => '',

    // 数据库连接配置信息
    'connections'     => [
        'mysql' => [
            // 数据库类型
            'type'            => env('database.type', 'mysql'),
            // 服务器地址
            'hostname'        => env('database.hostname', '127.0.0.1'),
            // 数据库名
            'database'        => env('database.database', ''),
            // 用户名
            'username'        => env('database.username', 'root'),
            // 密码
            'password'        => env('database.password', ''),
            // 端口
            'hostport'        => env('database.hostport', '3306'),
            // 数据库连接参数
            'params'          => [],
            // 数据库编码默认采用utf8
            'charset'         => env('database.charset', 'utf8'),
            // 数据库表前缀
            'prefix'          => env('database.prefix', ''),

            // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
            'deploy'          => 0,
            // 数据库读写是否分离 主从式有效
            'rw_separate'     => false,
            // 读写分离后 主服务器数量
            'master_num'      => 1,
            // 指定从服务器序号
            'slave_no'        => '',
            // 是否严格检查字段是否存在
            'fields_strict'   => true,
            // 是否需要断线重连
            'break_reconnect' => false,
            // 监听SQL
            'trigger_sql'     => env('app_debug', true),
            // 开启字段缓存
            'fields_cache'    => false,
        ],

        // 更多的数据库配置信息
    ],
];

模型创建
    # 多应用通过 php think make:model 应用名@模型名
    # 单应用通过 php think make:model 模型名
    php think make:model admin@User
模型相关属性说明
模型表名

默认表明是模型名称的小写(User 对应 user表)
可以通过设置table属性指定表名

declare (strict_types=1);

namespace app\admin\model;

use think\Model;

/**
 * @mixin \think\Model
 */
class User extends Model
{
    # 不指定则查user表
    protected $table = "admin_users";
}
模型主键设置

模型默认主键id,可以通过设置模型pk属性重新指定主键字段

 # 将模型主键改为mid
 protected $pk = "mid";
模型自动写入时间

通过设置 autoWriteTimestamp 是否开启自动写入创建时间&修改时间
autoWriteTimestamp 的默认值是true,开启自动写入
自动写入的创建时间字段是:create_time,可以通过 createTime属性修改该字段
自动写入的修改时间字段是:update_time,可以通过 updateTime属性修改该字段

declare (strict_types=1);

namespace app\admin\model;

use think\Model;

/**
 * @mixin \think\Model
 */
class User extends Model
{
    protected $autoWriteTimestamp = true;

    protected $createTime = 'created_at';

    protected $updateTime = 'updated_at';
}
软删除

需要使用 SoftDelete Trait
删除时间默认字段是delete_time 可以通过 deleteTime属性修改该字段

declare (strict_types=1);

namespace app\admin\model;

use think\Model;
use think\model\concern\SoftDelete;

/**
 * @mixin \think\Model
 */
class User extends Model
{
    use SoftDelete;

    protected $deleteTime = "deleted_at";

}
数据插入
通过create 插入
        # 返回插入后的user模型(模型包含插入的数据+插入后的主键)
        # 修改前会对比新旧数据,如果没有差异并不会去操作数据库,而是直接返回true
        $user = User::create([
            'username' => 'username1',
            'password' => '123456'
        ]);

        # 主键
        echo $user->id;
通过save方法保存

sava 有两种保存方法
第一种调用model的属性一个一个设置值,然后再保存

        # 一个一个设置值,然后调用save 保存
        # 成功后插入后的主键可以从当前对象上获取
        $user = new User();
        $user->username = "xieruixiang2";
        $user->password = "123456";
        $user->save();

        echo $user->id;

第二种通过save() 批量保存

        # 成功后插入后的主键可以从当前对象上获取
        ($user = new User())->save([
            'username' => 'xieruixiang3',
            'password' => '123456',
        ]);

        echo $user->id;
数据更新
通过save更新

通过save更新需要先查出获取到这个数据对应的model

        $user = User::find(2);
        # 返回true 修改成功 false修改失败
        # 等价 $user->username = '666'
        # $user->save();
        # save保存会要修改的新旧数据,如果新旧数据一致,则不会去操作数据库,而是直接返回true
        # 可以通过force(true)设置强制操作数据库
        # $affect = $user->force(true)->save(['username' => '666']);

        $affect = $user->save(['username' => '666']);
        echo $affect;
通过update更新
        # update 不触发模型事件
        # 也不会自动写入更新时间
        # 返回影响行数
        # 如果修改的数据和数据库中的数据对比一致的话 $affect则返回0        
        $affect = User::where('id', 2)->where('num', '>', 10)->update(['username' => 'update4 username']);
通过静态update更新
        # 通过静态update($data,$where,$filter) 修改数据,返回一个model对象
        # $data 要修改的数据
        # $where 修改条件
        # $filter 过滤 当$filter不为空时,过滤$data中的数据(即$data中的key要在$filter中存在才会修改)

        $user = User::update(['username' => 'xrx9', 'password' => '5666'], [['id', '>', 1]], ['username']);
通过saveAll更新
        # 通过saveAll($dataSet)
        # $dataSet 要修改的数据,二维数组(其中一维数组要包含主键)
        # 返回 由model元素组成的Collection对象
        $user = new User();
        $collection = $user->saveAll([
            ['id' => 1, 'username' => 'username_11'],
            ['id' => 2, 'username' => 'username_22'],
        ]);
数据删除
通过先查找到model对象后删除
        # 通过查找model后调用delete删除
        $user = User::find(2);
        # 返回false|true 判断是否删除成功
        $user->delete();
通过静态destroy删除
        # 通过model::destroy($data)
        # $data 可以是主键 代表删除一条数据
        User::destroy(1);
        # $data 可以是由主键构成的数组,代表删除多条数据
        User::destroy([1, 2]);
        # $data 可以是闭包函数,代表删除符合指定条件的数据
        # 删除 id > 1 的数据
        # 返回false|true 判断是否删除成功
        User::destroy(function ($query) {
            $query->where('id', '>', 1);
        });
通过where + delete 删除
        # 删除id 大于 1 的数据
        # 如果该模型使用了软删除,则删除无效
        # 返回false|true 判断是否删除成功
        User::where('id', '>', 1)->delete();
模型使用软删除的场景下进行物理删除
        # 如果模型使用了软删除
        # 想要进行物理删除,可以使用force(true) + delete 删除数据
        $user = User::where('id', 2)->find();
        $user->force(true)->delete();

        # 或者使用静态 destroy($data,$force)
        # $force 为true代表物理删除
        User::destroy([1, 2, 3], true);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值