前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >09 模型的增删查改《ThinkPHP6 入门到电商实战》

09 模型的增删查改《ThinkPHP6 入门到电商实战》

作者头像
1_bit
发布2022-10-04 18:52:44
4260
发布2022-10-04 18:52:44
举报
文章被收录于专栏:我的知识小屋

一、模型

在前面几节中我们已经学习了如何新建一个模型,以下是一个示例,首先创建一个 model 文件夹,随后在文件夹中创建一个php文件,在此我命名为 student:

随后在 student 文件中编写下面内容:

代码语言:javascript
复制
<?php
namespace app\model;
use think\Model;

class Student extends Model
{
    
}

这样该 Student 类就直接对应了student表,可以操作 student 表了。

若你觉得这个类名会引起冲突,你可以更改这个类名为,例如 StudentModel,随后指定对应的表名即可:

代码语言:javascript
复制
class StudentModel extends Model
{
    protected $name = 'student';
}

也可以在use 时使用 as 指定别名:

代码语言:javascript
复制
use app\model\StudentModel as StudentTable;

在此需要注意,使用模型时会自动的有一次查询获取表的字段,会额外增加开销,若要解决这个问题需要在新建模型类时对应的完整的配置字段信息,否则只会有你所编写的信息,例如:

代码语言:javascript
复制
class StudentModel extends Model
{
    protected $name = 'student';
    protected $schema = [ 
        'id' => 'bigint', 
        'name' => 'varchar', 
        'height' => 'bigint', 
        'nickname' => 'varchar'
    ];
}

二、模型中重写方法

在使用模型时,还可以在模型类中编写一些方法,例如获取器方法可在模型中重写,可以使其自动调用,并且可以在其中编写逻辑。例如当获取一个人的身高是否达标时,大于169则是达标,那么此时模型中可以编写为如下方法:

代码语言:javascript
复制
<?php
namespace app\model;
use think\Model;

class StudentModel extends Model
{
    protected $name = 'student';
    protected $schema = [ 
        'id' => 'int', 
        'name' => 'string', 
        'height' => 'int', 
        'nickname' => 'string'
    ];

    public function getHeightAttr($value) { 
        $height='不达标';
        if($value>169){
            $height='达标';
        }
        return $height; 
    }
}

其中在模型中获取器的使用方法为 getFieldAttr,所以在此处命名为 getHeightAttr,其中 $value 是对应的 Height 值,随后我们在使用时如下:

代码语言:javascript
复制
public function useModel(){
    $student = StudentModel::find(7); 
    echo $student->height;
}

此时结果如下:

.使用 return json($student); 后效果如下,若直接使用 dump 所看到的是原本的数据:

不修改的原始数据使用 getdata方法输出 :

代码语言:javascript
复制
return json($student->getData());

二、模型数据新增

在使用模型进行新增时使用的是 save 方法,例如如下示例:

代码语言:javascript
复制
public function useModel(){
    $student = new StudentModel();
    $student->name = '张小强'; 
    $student->height = 188; 
    $student->nickname = '小强'; 
    $res=$student->save();
    dump($res);
}

首先创建一个模型对象,随后指定对应的列表值,接着调用 save方法即可,以下是结果:

我们可以看到,此时返回一个布尔值判断操作是否成功。

也可以通过数组的方式进行传递新增内容:

代码语言:javascript
复制
public function useModel(){
   $student = new StudentModel();
   $data=[ 'name' => '王小强', 'height' => 199, 'nickname' => '小王'];
   $res=$student->save($data);
   dump($res);
}

同样也支持 allowField() 方法表示允许传入的值:

代码语言:javascript
复制
public function useModel(){
    $student = new StudentModel();
    $data=[ 'name' => '张小丽', 'height' => 180, 'nickname' => '小丽'];
    $res=$student->allowField(['name','height'])->save($data);
    dump($res);
}

此时操作即使成功,但没有允许的值将不会传入:

批量增加数据使用 saveAll 方法:

代码语言:javascript
复制
public function useModel(){
   $student = new StudentModel();
   $data=[
       [ 'name' => '胡磊', 'height' => 160, 'nickname' => '小磊'],
       [ 'name' => '王晓', 'height' => 170, 'nickname' => '小晓'],
       [ 'name' => '张国楠', 'height' => 167, 'nickname' => '小楠'],
       [ 'name' => '罗明生', 'height' => 166, 'nickname' => '小罗']
   ];
   $res=$student->allowField(['name','height','nickname'])->saveAll($data);
   dump($res);
}

此时将会返回一个 Collection 对象:

查看数据库,成功传入:

三、数据删除

使用模型删除数据很简单,一种是 delete 方法,使用 delete 方法需要首先使用 find 方法找到对应的 id 值,再调用 delete 方法,例如以下示例:

代码语言:javascript
复制
public function useModel(){
    $student = StudentModel::find(21);
    $res=$student->delete();
    dump($res);
}

此时返回的结果是布尔值:

还有几种删除方式如下:

代码语言:javascript
复制
StudentModel::destroy(21);
StudentModel::destroy([11,12,15,17]);
StudentModel::where('id', '=', 11)->delete();

四、查数据

以上已经演示了 find 方法,之后还可以通过 select 方法,where方法等,例如以下示例:

代码语言:javascript
复制
public function useModel(){
    $student = StudentModel::find(18);
    dump($student);
    $student = StudentModel::where('name', '一库')->find();//通过where
    dump($student);
    $student = StudentModel::select([3,4,6]);//等同于in
    dump($student);
    $student = StudentModel::whereIn('id',[3,4,6])->column('name','nickname');//找到对应id的值返回对应列
    dump($student);
    $student = StudentModel::getByname('胡磊');//动态查询name为胡磊值
    dump($student);
}

模型进行查询与之前的类似,就不过多赘述,详细参考文档。

五、改数据

以下介绍两种更新方法,单数据更新和多数据更新,其他方式跟非模型类似,查看手册即可:

代码语言:javascript
复制
public function useModel(){
    //单数据更新
    $student = StudentModel::find(7); 
    $student->name = '勇子'; 
    $student->nickname = '勇'; 
    $student->save();
    //多数据更新
    $student = new StudentModel(); 
    $data = [ 
        [
            'id'=>8, 
            'name'=>'PHP', 
            'nickname'=>'派hp'
        ], 
        [
            'id'=>9, 
            'name'=>'HTML', 
            'nickname'=>'爱去TML'
        ]
    ];
    $student->saveAll($data);
}

此时数据已成功更改:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、模型
  • 二、模型中重写方法
  • 二、模型数据新增
  • 三、数据删除
  • 四、查数据
  • 五、改数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档