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

thinkphp에 orm이 뭐야?

Feb 14, 2022 pm 05:04 PM
orm thinkphp

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으로 문의하세요.

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

thinkphp 프로젝트를 실행하는 방법 thinkphp 프로젝트를 실행하는 방법 Apr 09, 2024 pm 05:33 PM

ThinkPHP 프로젝트를 실행하려면 다음이 필요합니다: Composer를 설치하고, 프로젝트 디렉터리를 입력하고 php bin/console을 실행하고, 시작 페이지를 보려면 http://localhost:8000을 방문하세요.

thinkphp에는 여러 버전이 있습니다. thinkphp에는 여러 버전이 있습니다. Apr 09, 2024 pm 06:09 PM

ThinkPHP에는 다양한 PHP 버전용으로 설계된 여러 버전이 있습니다. 메이저 버전에는 3.2, 5.0, 5.1, 6.0이 포함되며, 마이너 버전은 버그를 수정하고 새로운 기능을 제공하는 데 사용됩니다. 최신 안정 버전은 ThinkPHP 6.0.16입니다. 버전을 선택할 때 PHP 버전, 기능 요구 사항 및 커뮤니티 지원을 고려하십시오. 최상의 성능과 지원을 위해서는 최신 안정 버전을 사용하는 것이 좋습니다.

thinkphp를 실행하는 방법 thinkphp를 실행하는 방법 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework를 로컬에서 실행하는 단계: ThinkPHP Framework를 로컬 디렉터리에 다운로드하고 압축을 풉니다. ThinkPHP 루트 디렉터리를 가리키는 가상 호스트(선택 사항)를 만듭니다. 데이터베이스 연결 매개변수를 구성합니다. 웹 서버를 시작합니다. ThinkPHP 애플리케이션을 초기화합니다. ThinkPHP 애플리케이션 URL에 접속하여 실행하세요.

PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까? PHP에서 ORM(객체 관계형 매핑)을 사용하여 데이터베이스 작업을 단순화하는 방법은 무엇입니까? May 07, 2024 am 08:39 AM

PHP의 데이터베이스 작업은 객체를 관계형 데이터베이스에 매핑하는 ORM을 사용하여 단순화됩니다. Laravel의 EloquentORM을 사용하면 객체 지향 구문을 사용하여 데이터베이스와 상호 작용할 수 있습니다. 모델 클래스를 정의하거나 Eloquent 메소드를 사용하거나 실제로 블로그 시스템을 구축하여 ORM을 사용할 수 있습니다.

laravel과 thinkphp 중 어느 것이 더 낫나요? laravel과 thinkphp 중 어느 것이 더 낫나요? Apr 09, 2024 pm 03:18 PM

Laravel과 ThinkPHP 프레임워크의 성능 비교: ThinkPHP는 일반적으로 최적화 및 캐싱에 중점을 두고 Laravel보다 성능이 좋습니다. Laravel은 잘 작동하지만 복잡한 애플리케이션의 경우 ThinkPHP가 더 적합할 수 있습니다.

thinkphp를 설치하는 방법 thinkphp를 설치하는 방법 Apr 09, 2024 pm 05:42 PM

ThinkPHP 설치 단계: PHP, Composer 및 MySQL 환경을 준비합니다. Composer를 사용하여 프로젝트를 만듭니다. ThinkPHP 프레임워크와 종속성을 설치합니다. 데이터베이스 연결을 구성합니다. 애플리케이션 코드를 생성합니다. 애플리케이션을 실행하고 http://localhost:8000을 방문하세요.

Hibernate는 어떻게 다형성 매핑을 구현합니까? Hibernate는 어떻게 다형성 매핑을 구현합니까? Apr 17, 2024 pm 12:09 PM

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

thinkphp 성능은 어떤가요? thinkphp 성능은 어떤가요? Apr 09, 2024 pm 05:24 PM

ThinkPHP는 캐싱 메커니즘, 코드 최적화, 병렬 처리 및 데이터베이스 최적화와 같은 장점을 갖춘 고성능 PHP 프레임워크입니다. 공식 성능 테스트에 따르면 초당 10,000개 이상의 요청을 처리할 수 있으며 JD.com, Ctrip과 같은 대규모 웹 사이트 및 엔터프라이즈 시스템에서 실제 응용 프로그램으로 널리 사용됩니다.

See all articles