thinkphp에서 ORM은 개발자가 데이터베이스를 쉽게 사용할 수 있도록 개발된 저장소 액세스 계층인 "객체 관계형 매핑"을 의미합니다. ORM의 주요 목적은 객체 모델로 표현되는 객체를 SQL 기반 관계형 모델 데이터베이스에 매핑하는 것입니다. 구조 들어갑니다.
이 튜토리얼의 운영 환경: 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은 개발자가 데이터베이스를 쉽게 사용할 수 있도록 개발된 저장소 액세스 계층입니다. 프레임워크 설계 그림은 다음과 같습니다.
주요 목적은 개체 모델로 표현되는 개체를 관계형 모델 데이터베이스 구조에 매핑하는 것입니다. SQL .
객체 자체의 속성을 변경하거나 객체의 메소드를 호출할 때 해당하는 특정 SQL 문이 실행됩니다.
이렇게 하면 코드를 작성하는 사람들은 SQL 문을 추가, 삭제, 수정, 쿼리를 반복적으로 작성하는 대신 비즈니스 로직을 더 잘 작성할 수 있습니다.
thinkphp
TP 프레임워크에는 데이터베이스 작업을 위한 두 가지 모듈이 있습니다.
문서 인용 기능 설명은 Connection(Connector)/Query(Query)/Builder(SQL Generator)
Query는 SQL 문을 실행하고, 결과를 처리하고, 데이터 세트에 매핑하는 데 사용됩니다.
Builder 생성기는 우리가 SQL 문으로 전달하는 조건, 정렬 등을 변환하는 데 사용됩니다.이 3단계에서 ORM 아이디어의 추상 매핑이 있으면 Query 쿼리 모듈만 가능하다는 것을 알 수 있지만 TP 문서의 데이터 세트에 대한 설명을 주의 깊게 확인할 수 있습니다.
toArray 将数据集的数据转为数组 merge 合并其它数据 diff 比较数组,返回差集 flip 交换数据中的键和值 intersect 比较数组,返回交集 keys 返回数据中的所有键名 pop 删除数据中的最后一个元素 shift 删除数据中的第一个元素 unshift 在数据开头插入一个元素 reduce 通过使用用户自定义函数,以字符串返回数组
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 = 'thinkphp'; // 保存,自己去数据库给我更新吧~ $user->save(); // *******插入新的一行数据******* // 新建一个对象(相对应的操作就是新创建一行) $user = new User; // 设置字段的值 有多个字段就多个设置 $user->name= 'thinkphp'; // 保存,自己去插入吧~ $user->save();
오해
봤습니다. 많은 초보자들이 사용하고 나서 코드를 작성하기 시작하는데 잘못된 방법으로 사용하는 경우가 많습니다. ① 모델은 Db 클래스에만 사용해야 합니다모델은 db 클래스의 상위 집합이라고 볼 수 있지만, 단순한 DB 클래스로만 사용한다면 ORM 아이디어를 사용하여 작성되지 않습니다. 그러면 그것을 사용할 필요가 없습니다. .
잘못 사용하면 효율성 향상에 실패할 뿐만 아니라 실제로 자신에게도 영향을 미치게 됩니다. (예를 들어 코드 사양이 통일되지 않은 경우, 해당 모델 파일과 함께 새 테이블을 추가해야 하는 경우 등) 코드 데모:<?php $userModel = new User(); // 这里就相当于初始化Db类 $userOneInfo = $userModel->where(['u_id' => 1])->find(); $userTwoInfo = $userModel->where(['u_id' => 2])->find(); // ... 执行其他逻辑 比如判断上下级 操作权限等等 // 业务需求不只是读取用户的数据这么简单 // 还要扣除余额(就是更新数据库) $userOneRes = $userModel->where(['u_id' => 1])->update(['u_balance' => 'xxxx']); // ... 执行其他逻辑이거 보면 잠시 멈춰서 생각해 보세요. . 당신의 코드가 이런 모습이었던 적이 있나요?
아직도 이렇게 사용하는 분들이 계신 것 같아요! 왜냐면 제가 이런 식으로 사용했거든요.
그럼 올바른 사용법을 살펴보도록 하겠습니다(제 생각에는 틀리거나 더 좋은 방법이 있으면 댓글로 교환해주세요)<?php $userOneInfo = User::get(1); // 这里演示使用非主键条件查询的情况!! // 查询一个1用户的下级出来 $userTwoInfo = User::get(function($query){ $query->where(['p_uid' => 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!