php

thinkphp6模式model类操作数据库

2023-04-10

直接通过navicate创建数据库yg_test,并在项目.env和config/database.php做好数据链接配置,注意yg_前缀的配置。

然后通过navicate新建yg_admin数据表,如下:

表.png


1、model模型


大概可以这样看模型,一个模型其实就是一个数据表,通过操作model模型来达到操作数据表;model模型以首字母大写的驼峰命名方式,如:AdminModel模型对应的数据表是admin_model、Admin模型对应的是admin数据表


如果数据表有前缀的话可以在.evn文件和config/database.php中配置前缀,这样模型命名时就可以把前缀去掉,如:数据表yg_admin对应的模式就是Admin。


2、新建模型

在app/admin/model/下新建模型Admin.php,并输入以下代码:


<?php

namespace app\admin\model;

use think\Model;

class Admin extends Model{

    // protected $table = 'admin';//当模型名与表名设置不一样时也可以通过$table来设置指定数据表

    // protected $pk = 'id';//当主键不是id字段时可以通过$pk来设置主键

    protected $schema = [//通过$schema来设置数据表字段信息,据说不设置也会自动获取,但是会多一次查询,浪费资源!

        'id'            => 'int',

        'typename'      => 'text',

        'mobile'    => 'int',

        'email'        => 'varchar',

        'password'      => 'char',

        'realname'    =>'varchar',

        'addtime'    =>'datetime',

       ' updatetime'    =>'datetime',

        'lastip'    =>'varchar',

    ];

    

}

3、新建控制器

在app/admin/controller下新建控制器datatest.php,并输入以下代码:


<?php

namespace app\admin\controller;

use app\admin\model\Admin;//引用Admin模型

 

class Datatest 

{

    public function index()

    {

        

        return '这里是数据测试链接';

    }

    public function add(){

        //通过原生方法向数据表添加数据

        $admin = new Admin;//实例化模型

        $admin -> save([//利用save()方法向数据表添加数据,此方法只能向已有字段添加数据,一般返回

            'typename'      => '超级管理员',

            'mobile'    => '13878298210',

            'email'        => '483427581@qq',

            'password'      => '123456',

            'realname'    =>'胡一可',

            'lastip'        =>'192.168.1.1'

        ]);

        return $admin;

    }

}


4、因为之前配置了强制路由,所以还要在route配置中配置路由


<?php

namespace app\admin\route;//命名空间路径

use think\facade\Route;//引用门面路由类

 

Route::get('/','index/index');          //内部路由定义路径时不需要加入应用路径

Route::get('hello','index/hello');

Route::get('datatest','datatest/index');

Route::get('add','datatest/add');


5、执行add方法时报错,是因为在yg_admin数据表中设计mobile字段时设置int类型,但是网上查了一下,说密码应该是varchar类型,所以改过来就可以了。

2.png

3.png

4.png

 

因为我执行了两次,所以就增加了两条数据。


6、静态方法create()方法添加数据

<?php

namespace app\admin\controller;

use app\admin\model\Admin;//引用Admin模型

class Datatest 

{

    public function index()

    {

        return '这里是数据测试链接';

    }

    public function add(){

        //通过静态方法添加数据

        $admin = Admin::create([

            'typename'      => '超级管理员',

            'mobile'    => '13367521200',

            'email'        => '483427581@qq',

            'password'      => '123456',

            'realname'    =>'胡一兴',

            'lastip'        =>'192.168.1.1'

        ]);

        return $admin;

    }

}

5.png


6.png

发现添加数据成功后数据表的里面addtime和updatetime并不会自动按当前时间增加,所以又百度了一下,以把addtime时间默认值改成:CURRENT_TIMESTAMP,updatetime字段的默认值改成: CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP

7.png


8.png