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

举报
1_bit 发表于 2022/09/24 22:55:05 2022/09/24
【摘要】 一、模型 在前面几节中我们已经学习了如何新建一个模型,以下是一个示例,首先创建一个 model 文件夹,随后在文件夹中创建一个php文件,在此我命名为 student: 随后在 student 文件中...

一、模型

在前面几节中我们已经学习了如何新建一个模型,以下是一个示例,首先创建一个 model 文件夹,随后在文件夹中创建一个php文件,在此我命名为 student:
在这里插入图片描述
随后在 student 文件中编写下面内容:

<?php
namespace app\model;
use think\Model;

class Student extends Model
{
    
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

class StudentModel extends Model
{
    protected $name = 'student';
}

  
 
  • 1
  • 2
  • 3
  • 4

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

use app\model\StudentModel as StudentTable;

  
 
  • 1

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二、模型中重写方法

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

<?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; 
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

public function useModel(){
    $student = StudentModel::find(7); 
    echo $student->height;
}

  
 
  • 1
  • 2
  • 3
  • 4

此时结果如下:

在这里插入图片描述

.使用 return json($student); 后效果如下,若直接使用 dump 所看到的是原本的数据:
在这里插入图片描述

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

return json($student->getData());

  
 
  • 1

在这里插入图片描述

二、模型数据新增

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

public function useModel(){
    $student = new StudentModel();
    $student->name = '张小强'; 
    $student->height = 188; 
    $student->nickname = '小强'; 
    $res=$student->save();
    dump($res);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

首先创建一个模型对象,随后指定对应的列表值,接着调用 save方法即可,以下是结果:
在这里插入图片描述
我们可以看到,此时返回一个布尔值判断操作是否成功。

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

public function useModel(){
   $student = new StudentModel();
   $data=[ 'name' => '王小强', 'height' => 199, 'nickname' => '小王'];
   $res=$student->save($data);
   dump($res);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

public function useModel(){
    $student = new StudentModel();
    $data=[ 'name' => '张小丽', 'height' => 180, 'nickname' => '小丽'];
    $res=$student->allowField(['name','height'])->save($data);
    dump($res);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

此时操作即使成功,但没有允许的值将不会传入:
在这里插入图片描述

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

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);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

此时将会返回一个 Collection 对象:
在这里插入图片描述
查看数据库,成功传入:
在这里插入图片描述

三、数据删除

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

public function useModel(){
    $student = StudentModel::find(21);
    $res=$student->delete();
    dump($res);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

此时返回的结果是布尔值:
在这里插入图片描述
还有几种删除方式如下:

StudentModel::destroy(21);
StudentModel::destroy([11,12,15,17]);
StudentModel::where('id', '=', 11)->delete();

  
 
  • 1
  • 2
  • 3

四、查数据

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

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);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

五、改数据

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

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);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

此时数据已成功更改:
在这里插入图片描述

文章来源: i1bit.blog.csdn.net,作者:1_bit,版权归原作者所有,如需转载,请联系作者。

原文链接:i1bit.blog.csdn.net/article/details/126196801

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。