>PHP 프레임워크 >ThinkPHP >thinkphp에 orm이 뭐야?

thinkphp에 orm이 뭐야?

青灯夜游
青灯夜游원래의
2022-02-14 17:04:064284검색

thinkphp에서 ORM은 개발자가 데이터베이스를 쉽게 사용할 수 있도록 개발된 저장소 액세스 계층인 "객체 관계형 매핑"을 의미합니다. ORM의 주요 목적은 객체 모델로 표현되는 객체를 SQL 기반 관계형 모델 데이터베이스에 매핑하는 것입니다. 구조 들어갑니다.

thinkphp에 orm이 뭐야?

이 튜토리얼의 운영 환경: Windows 7 시스템, thinkphp v5.1 버전, Dell G3 컴퓨터.

thinkphp ORM

ORM의 정식 명칭은 Object Relational Mapping, 즉 object 관계형 매핑

  • O(Object) 프로젝트에서 Object는 개체, 더 정확하게는 데이터 모델입니다. 즉, Persistence 클래스라고 할 수 있다.

  • R(관계) 관계형 데이터

  • M(매핑) 매핑, 객체를 관계형 데이터에 매핑하고 관계형 데이터를 객체에 매핑하는 프로세스입니다.

보다 직관적으로 이해하면 ORM은 OOP 사고를 사용하여 SQL 문을 추가, 삭제, 수정 및 쿼리한다는 것입니다.

ThinkPHP의 ORM은 개발자가 데이터베이스를 쉽게 사용할 수 있도록 개발된 저장소 액세스 계층입니다. 프레임워크 설계 그림은 다음과 같습니다.

thinkphp에 orm이 뭐야?

주요 목적은 개체 모델로 표현되는 개체를 관계형 모델 데이터베이스 구조에 매핑하는 것입니다. SQL .

객체 자체의 속성을 변경하거나 객체의 메소드를 호출할 때 해당하는 특정 SQL 문이 실행됩니다.

이렇게 하면 코드를 작성하는 사람들은 SQL 문을 추가, 삭제, 수정, 쿼리를 반복적으로 작성하는 대신 비즈니스 로직을 더 잘 작성할 수 있습니다.

thinkphp

TP 프레임워크에는 데이터베이스 작업을 위한 두 가지 모듈이 있습니다.

문서 인용 기능 설명
  • 은 Connection(Connector)/Query(Query)/Builder(SQL Generator)

  • 로 구분됩니다. Connection 커넥터는 주로 데이터베이스에 연결하는 데 사용되며, 서로 다른 유형의 연결을 위해 서로 다른 드라이버를 사용할 수 있습니다. 데이터 베이스.

Query는 SQL 문을 실행하고, 결과를 처리하고, 데이터 세트에 매핑하는 데 사용됩니다.

Builder 생성기는 우리가 SQL 문으로 전달하는 조건, 정렬 등을 변환하는 데 사용됩니다.

이 3단계에서 ORM 아이디어의 추상 매핑이 있으면 Query 쿼리 모듈만 가능하다는 것을 알 수 있지만 TP 문서의 데이터 세트에 대한 설명을 주의 깊게 확인할 수 있습니다.
  • 다음과 같은 데이터 처리 방법을 캡슐화하고 제공하는 것에 관한 것입니다.

    (다음은 문서에서 복사한 작은 부분입니다)
  • toArray     将数据集的数据转为数组
    merge   合并其它数据
    diff    比较数组,返回差集
    flip    交换数据中的键和值
    intersect   比较数组,返回交集
    keys    返回数据中的所有键名
    pop 删除数据中的最后一个元素
    shift   删除数据中的第一个元素
    unshift 在数据开头插入一个元素
    reduce  通过使用用户自定义函数,以字符串返回数组
  • 그러나 데이터 세트를 운영할 때와 같은 역 매핑 관계 연산은 제공하지 않습니다. , 데이터베이스의 데이터를 자동으로 업데이트합니다.

    그래서 제가 알기로는 데이터베이스 모듈에는 ORM 아이디어가 많지 않습니다. 핵심은 모델을 이해하고 적용하는 것입니다.
  • tp

모델 파일을 정의합니다

namespace app\index\model;

use think\Model;

// 设置类名 需要遵循转换规则,蛇形转为大驼峰
class User extends Model
{
    // 设置主键字段名
    protected $pk = 'u_id';

    // 开启自动维护时间戳字段 (什么时间插入 什么时间更新)
    protected $autoWriteTimestamp = true;

    // 软删除 开启之后 删除数据只是用一个字段来标识为删除状态 方便查询、备份等
    use SoftDelete;
    protected $deleteTime = 'delete_time';

}

위 코드가 더 좋습니다. 문서의 첫 번째 장 모델 초기화 섹션에 내용이 조금 더 있습니다. 이는 모델이 많은 기능을 완료할 수 있다는 점을 강조하기 위한 것입니다.

이것이 ORM이 나타나는 이유이기도 합니다: SQL 실행을 객체의 객체에 추상적으로 매핑합니다. 지향 프로그래밍.

이를 다음과 같이 이해할 수 있습니다. 테이블의 데이터 행은 코드의 새 개체를 나타냅니다. 개체가 변경되면 테이블의 해당 행이 자동으로 업데이트됩니다.

모델 사용

시연된 코드는 비교적 간단하지만 실제로는 매우 유연할 수 있습니다.

예를 들어 기본 키가 아닌 조건을 사용하여 쿼리, 여러 레코드 행 쿼리 등을 사용할 수 있습니다.

<?php
// *******快速查询、更新*******
// 查询主键=1的数据
$user = User::get(1);
// 然后更改它的name字段为新的值
$user->name = &#39;thinkphp&#39;;
// 保存,自己去数据库给我更新吧~
$user->save();

// *******插入新的一行数据*******
// 新建一个对象(相对应的操作就是新创建一行)
$user = new User;
// 设置字段的值  有多个字段就多个设置
$user->name= &#39;thinkphp&#39;;
// 保存,自己去插入吧~
$user->save();

오해

봤습니다. 많은 초보자들이 사용하고 나서 코드를 작성하기 시작하는데 잘못된 방법으로 사용하는 경우가 많습니다.

① 모델은 Db 클래스에만 사용해야 합니다

모델은 db 클래스의 상위 집합이라고 볼 수 있지만, 단순한 DB 클래스로만 사용한다면 ORM 아이디어를 사용하여 작성되지 않습니다. 그러면 그것을 사용할 필요가 없습니다. .

잘못 사용하면 효율성 향상에 실패할 뿐만 아니라 실제로 자신에게도 영향을 미치게 됩니다. (예를 들어 코드 사양이 통일되지 않은 경우, 해당 모델 파일과 함께 새 테이블을 추가해야 하는 경우 등)

코드 데모:

<?php
$userModel = new User(); // 这里就相当于初始化Db类
$userOneInfo = $userModel->where([&#39;u_id&#39; => 1])->find();

$userTwoInfo = $userModel->where([&#39;u_id&#39; => 2])->find();
// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneRes = $userModel->where([&#39;u_id&#39; => 1])->update([&#39;u_balance&#39; => &#39;xxxx&#39;]);

// ... 执行其他逻辑

이거 보면 잠시 멈춰서 생각해 보세요. . 당신의 코드가 이런 모습이었던 적이 있나요?

아직도 이렇게 사용하는 분들이 계신 것 같아요! 왜냐면 제가 이런 식으로 사용했거든요.

그럼 올바른 사용법을 살펴보도록 하겠습니다(제 생각에는 틀리거나 더 좋은 방법이 있으면 댓글로 교환해주세요)

<?php

$userOneInfo = User::get(1);

// 这里演示使用非主键条件查询的情况!!
// 查询一个1用户的下级出来
$userTwoInfo = User::get(function($query){
    $query->where([&#39;p_uid&#39; => 1]);
});

// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneInfo->u_balance = 0;
$userOneRes = $userOneInfo->save();

$userTwoInfo->u_balance = 0;
$userTwoRes =  $userTwoInfo->save();

// ... 执行其他逻辑

객체는 데이터 조각을 매핑하기 때문에 우리는 동일한 조건을 가진 데이터와 객체가 직접 작동하면 충분합니다. u_id =1 업데이트, u_id = 1 삭제를 위해 반복적으로 작성할 필요가 없습니다.

모델을 사용하면 많은 용도가 있습니다. (우리를 위해 많은 기능을 캡슐화한 오픈 소스 팀의 헌신 덕분입니다. )

예:

– 새로운 데이터가 사용자 테이블에 추가되면 다른 보조 테이블도 사용자 ID로 행을 초기화해야 합니다.

– 데이터 형식을 자동으로 변환합니다(타임스탬프를 저장하면 쿼리는 2019-7-13 19:53:04 형식이 됩니다).

– 자동으로 데이터를 검증하고 자동으로 데이터를 완성합니다. (운영 중 운영자의 IP 권한 및 기타 저장 공간은 기본적으로 가져옵니다.)

– 연관 쿼리(TP의 매우 강력한 기능입니다. 다른 모델과의 관계는 모델에서 정의됩니다. 예를 들어 매장 테이블의 u_id를 사용하여 해당 매장에 속한 사용자의 정보를 쿼리할 수 있습니다. 스토어 모델과 사용자 모델 간의 연관과 동일합니다. 자동 조인 데이터 병합이 사용을 위해 우리에게 반환됩니다.)

– 잠깐

요약

ORM은 객체 관계형 매핑을 나타내는 아이디어, 개념입니다. (데이터베이스-객체 매핑) ORM은 데이터 작업을 개체 작업으로 추상화합니다. 생각을 바꾸고, 프레임워크가 제공하는 기능을 잘 활용하고, 더 나은 코드를 작성하는 방법을 배우십시오. TP의 모델은 매우 강력하며 많은 논리를 캡슐화합니다.

【관련 튜토리얼 추천: thinkphp Framework

위 내용은 thinkphp에 orm이 뭐야?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.