찾다
PHP 프레임워크ThinkPHPThinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법을 자세히 설명하는 기사

Thinkphp5에서 데이터베이스를 어떻게 운영하고 추가, 삭제, 수정, 쿼리를 수행하나요? 다음 기사에서는 Thinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법에 대해 자세히 설명합니다. 도움이 되기를 바랍니다.

Thinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법을 자세히 설명하는 기사

thinkphp 표준 데이터 테이블 디자인:

시간 필드 생성: create_time

업데이트 시간 필드: update_time

삭제 시간 필드: delete_time

아래와 같이 유형으로 int를 선택합니다.

Thinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법을 자세히 설명하는 기사

[관련 튜토리얼 권장사항: thinkphp Framework]

1. 모델 폴더 생성

애플리케이션 폴더 아래의 보조 개체 디렉터리에 model이라는 새 폴더를 만듭니다.

Thinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법을 자세히 설명하는 기사

여러 모듈(예: 프런트엔드 인덱스, 백엔드 관리자)이 있고 이들이 운영하는 데이터베이스가 유사한 경우 모델 모델을 공통 공용 모듈에 넣을 수 있습니다.

Thinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법을 자세히 설명하는 기사

2. 모델 모델 클래스를 생성합니다

1. 모델 디렉터리에 모델 개체 파일을 생성합니다. 일반적으로 모델 이름은 테이블 이름과 일치합니다. 예:

表名 pre_user       --------------->  模型名 User.php
表名 pre_user_info  --------------->  模型名 UserInfo.php

2. 모델 모델 정의

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

class User extends Model{
	/**
     * 定义变量
     * 1.变量名称应与数据表中的字段名相同
     * 2.此处可根据需求省略,因为如果没有,thinkphp会自动在数据表中寻找的对应字段名
     */
	public $username;
	public $password;
}
?>

3. 데이터 모델 정의 이름과 테이블 이름이 일치하지 않는 경우 다음과 같이 추가 정의 및 선언이 필요합니다.

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

class User extends Model
{
	protected $table = "admin_user";//指定数据表名
    protected $pk = &#39;id&#39;;           //指定主键的字段
}
?>

3. 모델 호출 방법

//导入定义的数据模型类
use \app\index\model\User;

//方法一:
$res = User::get(1);

//方法二:
$user = new User;
$res = $user::get(1);	

//方法三:
use think\Loader;
$user = Loader::model("User");
$res = $user::get(1);

//方法四:
$user = model("User");       
$res = $user::get(1);

4. 쿼리 작업

get 하나의 레코드 가져오기

$res = User::get(1);

all 여러 레코드 가져오기

1. 매개변수가 전달되지 않았습니다.

$result = User::all(); //查询出所有记录

2 매개변수는 n이고, n은 양의 정수입니다.

$result = User::all(1); //查询出id为1的记录

3. n1, n2, n3...'

$result = User::all(&#39;7, 8, 9, 10&#39;); //查询出id为7、8、9、10的4条记录

4. 매개변수는 [n1, n2, n3..]입니다.

$result = User::all([7, 8, 9, 10]); //查询出id为7、8、9、10的4条记录

특정

 $res = User::where(&#39;id&#39;,&#39;1&#39;)->field(&#39;name&#39;)->find();

에 대한 검색어는

-> where('id','neq',1)

여러 쿼리 선택

$res = User::where(&#39;id&#39;,&#39;1&#39;)->field(&#39;name&#39;)->limit(2)->order(&#39;id DESC&#39;)->select();

값 누르기 필드 쿼리

$res = User::where(&#39;id&#39;,&#39;1&#39;)->value(&#39;name&#39;);

결과를 배열로 변환

$res = $res->toArray();

쿼리 번호

//查询总条数
$res = User::count();
//按条件统计条数
$res = User::where(&#39;id&#39;,&#39;>&#39;,3)->count();

whereTime() 시간 조건 쿼리

1. 오늘 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;today&#39;)->select();
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;d&#39;)->select();

2. 어제 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;yesterday&#39;)->select();

3. 이번 주 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;week&#39;)->select();   
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;w&#39;)->select();

4. 이번 달 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;month&#39;)->select();   
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;m&#39;)->select();

5. 지난 달 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;,&#39;last month&#39;)->select();

6. 올해 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;year&#39;)->select();    
//也可以简化为下面方式
db(&#39;table&#39;)->whereTime(&#39;c_time&#39;, &#39;y&#39;)->select();

7. 작년 정보 가져오기

db(&#39;table&#39;)->whereTime(&#39;c_time&#39;,&#39;last year&#39;)->select();

8. 기간 쿼리

//根据时间戳查询今天到后天
db(&#39;table&#39;)->whereTime(&#39;time&#39;, &#39;between&#39;, [strtotime(date(&#39;Y-m-d&#39;)), strtotime(date(&#39;Y-m-d&#39;, strtotime(&#39;+2 day&#39;)))])->select();
根据日期查询今天到后天
db(&#39;table&#39;)->whereTime(&#39;time&#39;, &#39;between&#39;, [&#39;2020-3-28&#39;, &#39;2020-3-30&#39;])->select();

5. 작업 추가

1.create() 메소드를 사용하여 데이터를 추가합니다. 그리고 추가된 기본 키를 반환합니다.

$res = User::create([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ]);

다음과 같이 DB 클래스의 insertGetId 메서드를 사용할 수도 있습니다.

$uid=UserModel::create([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ])->id;

3. 인스턴스화 메서드 추가

$uid = User::insertGetId([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ]);

4 인스턴스화 메서드는 삽입된 필드를 필터링하고 삽입된 행 수를 반환합니다.

 $user = new User;
 $user->name =  &#39;安阳&#39;;
 $user->age =  23;
 $user->save();

5. 모델은 비데이터 테이블 필드의 데이터를 필터링하기 위해 allowedField()를 사용합니다

 $user = new User;
 $data = [
     &#39;name&#39; => &#39;安阳&#39;,
     &#39;age&#39; => 23,
     &#39;email&#39; => &#39;123456@qq.com&#39;
 ];
 //只有name和age字段会写入
 $res = $user->allowField([&#39;name&#39;, &#39;age&#39;])->save($data);

6. 모델은 특정 필드를 지정하기 위해 AllowField()를 사용합니다. 일괄 추가

//定义模型对象,并传入post数据
$user = new User($_POST);
//过滤post数组中的非数据表字段数据
$user->allowField(true)->save();

또한 DB 클래스의 insertAll() 메서드를 사용하여 성공적으로 추가된 항목 수를 반환할 수 있습니다.

$user = new User;
// post数组中只有name和email字段会写入
$user->allowField([&#39;name&#39;,&#39;email&#39;])->save($_POST, [&#39;id&#39; => 1]);

또한 필드를 필터링하는 다른 방법:

1. strict를 사용하여 엄격한 필드 검사를 끌 수 있습니다

user = new User;
$list = [
    [&#39;name&#39;=>&#39;安阳&#39;,&#39;email&#39;=>&#39;thinkphp@qq.com&#39;],
    [&#39;name&#39;=>&#39;小柒&#39;,&#39;email&#39;=>&#39;12345678@qq.com&#39;]
 ];
$user->saveAll($list);
2. PHP의 unset() 메서드를 사용하여 변수를 삭제하세요

$res = User::insertAll([
     &#39;name&#39;      => &#39;安阳&#39;,
     &#39;age&#39;       => 23,
     &#39;sex&#39;       => 1,
     &#39;password&#39;  => &#39;123456&#39;
 ]);

6. saveAll은 여러 데이터 조각을 추가하고 객체 목록을 반환합니다

Db::name(‘user’)->strict(false)->insert($data);

6. .업데이트는 영향을 받은 행 수를 반환합니다. list
unset($data[‘file’]);

Seven. 삭제 작업

1. 기본 키를 전달하고 영향을 받은 행 수를 반환합니다.

 $user = new User;
 $data = [
     [
         &#39;name&#39; => &#39;安阳&#39;,
         &#39;age&#39; => 20,
         &#39;email&#39; => &#39;123456@qq.com&#39;
     ],
     [
         &#39;name&#39; => &#39;小柒&#39;,
         &#39;age&#39; => 25,
         &#39;email&#39; => &#39;ap555@qq.com&#39;
     ]
 ];
 $res = $user->allowField([&#39;name&#39;, &#39;age&#39;])->saveAll($data);

2. 조건을 전달하고 영향을 받은 행 수를 반환합니다.

 $res = User::where([&#39;id&#39;=>1])->update([&#39;name&#39;=>&#39;安阳&#39;]);

3. 영향을 받은 행

User::where(&#39;id&#39;,1)->setField(&#39;name&#39;,&#39;安阳&#39;);

Eight. Transaction

1. 트랜잭션 처리를 자동으로 제어합니다

//setInc(&#39;money&#39;,10)表示将money字段加上10
User::where([&#39;id&#39;=>1])->setInc(&#39;money&#39;, 10);

2. 트랜잭션을 수동으로 제어합니다. 모델 모델 getter

리더의 명명 규칙은 다음과 같습니다. 속성 이름의 낙타 케이스 이름 지정 + Attr

//setDec(&#39;money&#39;,10)表示将money字段减去10
User::where([&#39;id&#39;=>1])->setDec(&#39;money&#39;, 10);

추가 설명: strtotime()은 영어 텍스트의 날짜 및 시간 설명을 Unix 타임스탬프로 구문 분석하고 성공하면 타임스탬프를 반환하고 그렇지 않으면 FALSE를 반환합니다(PHP 5.1 이전) .0, 이 함수는 실패 시 -1을 반환했습니다. )

十、model模型的修改器

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	//修改器
	public function setTimeAttr()
	{
        return time();
	}
    /** 修改器:对密码字段加密之后存储
     * $val  第一个参数是密码
     * $data 第二个参数是添加的数据(可选)
     */
    public function setPasswordAttr($val,$data){
        if($val === &#39;&#39;) {
            return $val;
        }else{
            return md5($val.$data[&#39;email&#39;]);
        }
    }
}

十一、model模型的自动完成

auto       新增及更新的时候,自动完成的属性数组
insert     仅新增的时候,自动完成的属性数组
update   仅更新的时候,自动完成的属性数组

1、自动完成 

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	//添加和修改时,都会自动完成的字段
    protected $auto = [&#39;addtime&#39;];

    public function setAddtimeAttr(){
        return time();
    }
}

2、添加数据时,自动完成 

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	// 新增 自动完成
    protected $insert = [&#39;addtime&#39;];

    public function setAddtimeAttr(){
        return time();
    }
}

3、更新数据时,自动完成:

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
	// 更新 自动完成
    protected $update = [&#39;addtime&#39;];

    public function setAddtimeAttr(){
        return time();
    }
}

十二、自动完成时间戳

在数据库配置文件database.php中,有下列这项配置:

//自动写入时间戳字段
&#39;auto_timestamp&#39;  => false,
//如果开启(设置为true),则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。

例如对用户表的时间戳自动完成,就在User的model中设置:

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

class User extends Model{
    //开启自动完成时间戳功能
    protected $autoWriteTimestamp = true;
    //开启后,
    //添加数据时,默认自动完成的字段是:create_time和update_time
    //修改数据时,默认自动完成的字段是:update_time
    
    //如果数据表里不是这两个字段,则会报错。需要进行如下修改:
    protected $createTime = &#39;addtime&#39;;//修改默认的添加时间字段
    protected $updateTime = &#39;updtime&#39;;//修改默认的修改时间字段
    protected $updateTime = false;//当不需要这个字段时设置为false
}

Thinkphp更新时,自动更新update_time字段时间戳的方法:

1、使用update

User::update([&#39;name&#39;=>&#39;安阳&#39;],[&#39;id&#39;=>1]);

Thinkphp中update方法的源代码如下:

/**
    * 更新数据
    * @access public
    * @param array      $data  数据数组
    * @param array      $where 更新条件
    * @param array|true $field 允许字段
    * @return $this
    */
   public static function update($data = [], $where = [], $field = null)
   {
       $model = new static();
       if (!empty($field)) {
           $model->allowField($field);
       }
       $result = $model->isUpdate(true)->save($data, $where);
       return $model;
   }

2、使用save

$user=new User;
$user->isUpdate(true)->save([&#39;name&#39;=>&#39;安阳&#39;],[&#39;id&#39;=>1]);

 

十三、软删除

什么是软删除?

当删除某些记录时,有时我们需要假删除,只通过修改某个字段状态来标记该记录已删除,但实际上,数据库中还是存在这些记录的。假删除的应用场景还是比较多的,例如支付宝的收款记录,我们在APP上删除后,就不会再显示出来,你是不是以为真的删掉了,不会再留下任何痕迹?非也,非也,删除支付宝收款记录只是软删除,在支付宝的数据库中,实际上还保留有这些收款记录,如果你的收款涉嫌违规或者触犯法律,警方还是能通过支付宝的网警后台查看到的。

1、开启软删除

<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;//引入软删除的类

class Order extends Model{
    //使用软删除
    //删除时,默认更新的字段是delete_time
    use SoftDelete;
    //如果数据表里不是delete_time这个字段,则会报错。需要进行如下修改:
    protected $deleteTime = &#39;deltime&#39;;
}

2、 控制器里软删除,返回影响的行数

 $res = Order::destroy(1);

执行删除后,就会更新delete_time字段,如果update_time字段也开启了自动完成,也会更新update_time字段。

3、如果开启了软删除,需要真正地删除数据,而不做软删除,用下面的方法

//destory()第二个参数传递true
$res = Order::destroy(1,true);

//delete()参数传递true
$orderData = Order::get(1);
$orderData ->delete(true);

4、查询已软删除的数据

$res = Order::withTrashed(true)->find(1);

5、查询仅包含已软删除的数据

$res = Order::onlyTrashed()->select();

推荐学习:《PHP视频教程

위 내용은 Thinkphp5에서 데이터베이스를 추가, 삭제, 수정 및 쿼리하는 방법을 자세히 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 掘金社区에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
如何使用PHP脚本在Linux环境下进行数据库操作如何使用PHP脚本在Linux环境下进行数据库操作Oct 05, 2023 pm 03:48 PM

如何使用PHP在Linux环境下进行数据库操作在现代web应用程序中,数据库是必不可少的组成部分。PHP是一种流行的服务器端脚本语言,它可以与各种数据库进行交互。本文将介绍如何在Linux环境下使用PHP脚本进行数据库操作,并提供一些具体的代码示例。步骤1:安装必要的软件和依赖项在开始之前,我们需要确保在Linux环境下安装了PHP和相关的依赖项。通常情况下

php如何使用CodeIgniter4框架?php如何使用CodeIgniter4框架?May 31, 2023 pm 02:51 PM

PHP是一种非常流行的编程语言,而CodeIgniter4是一种常用的PHP框架。在开发Web应用程序时,使用框架是非常有帮助的,它可以加速开发过程、提高代码质量、降低维护成本。本文将介绍如何使用CodeIgniter4框架。安装CodeIgniter4框架CodeIgniter4框架可以从官方网站(https://codeigniter.com/)下载。下

如何使用宝塔面板进行MySQL管理如何使用宝塔面板进行MySQL管理Jun 21, 2023 am 09:44 AM

宝塔面板是一种功能强大的面板软件,它可以帮助我们快速部署、管理和监控服务器,尤其是经常需要进行网站搭建、数据库管理以及服务器维护的小型企业或个人用户。在这些任务中,MySQL数据库管理在很多情况下是一个重要的工作。那么如何使用宝塔面板进行MySQL管理呢?接下来,我们将逐步介绍。第一步:安装宝塔面板在开始使用宝塔面板进行MySQL管理之前,首先需要安装宝塔面

使用PDO进行数据库操作:PHP的一个更好的方式使用PDO进行数据库操作:PHP的一个更好的方式Jun 21, 2023 pm 01:36 PM

使用PDO进行数据库操作:PHP的一个更好的方式在Web开发中,使用数据库进行数据存储、管理和查询是非常常见的。而PHP作为一种广泛应用于Web开发的语言,自然也提供了丰富的数据库操作方式。在PHP中,可以使用MySQLi、PDO以及其他扩展库来进行数据库操作。其中,PDO是一种非常常用的数据库操作方式,相比于其他方式有更多的优点。本文将介绍什么是PDO,以

如何使用thinkorm来提高数据库操作效率如何使用thinkorm来提高数据库操作效率Jul 28, 2023 pm 03:21 PM

如何使用thinkorm来提高数据库操作效率随着互联网的迅速发展,越来越多的应用程序需要进行大量的数据库操作。在这个过程中,数据库操作的效率问题就变得尤为重要。为了提高数据库操作效率,我们可以使用thinkorm这个强大的ORM框架来进行数据库操作。本文将介绍如何使用thinkorm来提高数据库操作效率,并通过代码示例来说明。一、什么是thinkormthi

如何在Symfony框架中使用Doctrine ORM进行数据库操作如何在Symfony框架中使用Doctrine ORM进行数据库操作Jul 29, 2023 pm 04:13 PM

如何在Symfony框架中使用DoctrineORM进行数据库操作引言:Symfony框架是一个流行的PHP框架,它提供了许多强大的工具和组件,用于快速而简单地构建Web应用程序。其中一个关键的组件是DoctrineORM,它提供了一种优雅的方式来处理数据库操作。本文将详细介绍在Symfony框架中如何使用DoctrineORM来进行数据库操作。我们将

如何使用Flask-SQLAlchemy进行数据库操作如何使用Flask-SQLAlchemy进行数据库操作Aug 02, 2023 am 08:39 AM

如何使用Flask-SQLAlchemy进行数据库操作Flask-SQLAlchemy是一种方便的扩展,可以在Flask应用中操作数据库。它提供了简单的API,以减少开发人员的工作量,并且与Flask框架无缝集成。本文将介绍如何使用Flask-SQLAlchemy进行数据库操作并提供代码示例。安装Flask-SQLAlchemy首先,需要安装Flask-SQ

如何使用Go语言进行数据库操作如何使用Go语言进行数据库操作Aug 02, 2023 pm 03:25 PM

如何使用Go语言进行数据库操作引言:Go语言是一种高效且简洁的编程语言,拥有强大的并发能力和优秀的性能表现。在开发过程中,与数据库的交互是一个非常重要的环节。本文将介绍如何使用Go语言进行数据库操作,包括连接数据库、CRUD操作以及事务处理等。一、连接数据库在Go语言中,我们可以使用各种数据库驱动来连接不同类型的数据库,如MySQL、PostgreSQL、S

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기