ThinkPHP: JSON 필드 유형(ORM) 사용
ThinkPHP 5.1이 정식 출시된 지 꽤 됐는데, 새로운 기능을 차례로 소개하겠습니다. 오늘 소개해드리고 싶은 기능은 아직 많은 사용자들이 이해하지 못하는 기능인 JSON 필드 데이터 지원입니다.
하지만 우선 이 글에서 설명한 JSON 필드 데이터에 대한 지원은 V5.1.4+ 버전부터 도입되었다는 점을 참고하세요. 보안 업데이트가 포함되어 있으므로 버전 5.1.9+를 사용하는 것이 좋습니다.
본 문서의 JSON 필드 정의에는 저장된 데이터가 JSON 형식인 JSON 유형 또는 문자 유형이 포함됩니다. 따라서 이론적으로 JSON 필드 조건부 쿼리를 사용하는 것 외에는 데이터베이스 유형 및 버전에 대한 요구 사항이 없습니다.
Db 클래스는 JSON을 운영합니다
모델 클래스를 사용하지 않는 경우 Db 클래스는 데이터 테이블의 JSON 형식 필드를 지정하는 json 메서드를 제공합니다. 예를 들어 사용자 테이블에는 JSON 유형의 정보 필드가 있습니다. 다음 방법을 사용하여 데이터를 조작할 수 있습니다.
데이터 쓰기
$user['name'] = 'thinkphp'; $user['info'] = [ 'email' => 'thinkphp@qq.com', 'nickname' => '流年', ]; Db::name('user') ->json(['info']) ->insert($user);
json 메소드의 매개변수는 배열입니다. info 필드는 실제로 여러 JSON 유형 필드를 지정할 수 있습니다.
데이터 쿼리
전체 JSON 데이터 사용량을 쿼리합니다.
$user = Db::name('user') ->json(['info']) ->find(1); dump($user);
반환된 쿼리 결과 데이터에는 배열 유형의 정보 데이터가 자동으로 포함됩니다. 이는 JSON 형식의 데이터가 json_decode에 의해 자동으로 처리되었음을 의미합니다.
이 쿼리 방법은 정보 필드에 JSON 유형의 사용을 엄격히 요구하지 않습니다.
JSON 데이터 값을 기반으로 쿼리해야 하는 경우 다음 방법을 사용할 수 있습니다
$user = Db::name('user') ->json(['info']) ->where('info->nickname','ThinkPHP') ->find(); dump($user);
정보 필드는 다음과 같아야 합니다. JSON 유형이어야 하며 MySQL에는 버전 5.7 이상이 필요합니다.
를 지원하려면 물론 다중 레벨도 지원할 수 있습니다.
$user = Db::name('user') ->json(['info']) ->where('info->profile->nickname','ThinkPHP') ->find(); dump($user);
JSON 필드의 속성 유형은 자동으로 가져오지 않으므로 정수 데이터 쿼리인 경우, 수동 매개변수 바인딩이 필요합니다. 예:
$user = Db::name('user') ->json(['info']) ->where('info->user_id', ':user_id') ->bind(['user_id' => [10, \PDO::PARAM_INT]]) ->find(); dump($user);
data Update
Complete JSON data update
$data['info'] = [ 'email' => 'kancloud@qq.com', 'nickname' => 'kancloud', ]; Db::name('user') ->json(['info']) ->where('id',1) ->update($data);
이 쿼리 방법에서는 정보 필드에 JSON 유형을 사용할 필요가 없습니다
업데이트만 하면 JSON 데이터에 특정 값을 추가하려면 다음 방법을 사용할 수 있습니다.
$data['info->nickname'] = 'ThinkPHP'; Db::name('user') ->json(['info']) ->where('id',1) ->update($data);
마찬가지로 정보 필드는 JSON 유형이어야 합니다
모델 작업 JSON 데이터
모델을 사용하여 작업하는 경우 데이터베이스를 사용하면 JSON 데이터 작업이 더 간단해집니다.
사용자 모델 클래스에 json 속성 정의만 추가하면 됩니다.
<?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 protected $json = ['info']; }
json 속성은 여러 필드 이름 정의도 지원합니다. 정의 후 다음 JSON 데이터 작업을 수행할 수 있습니다.
데이터 쓰기
배열 메서드를 사용하여 JSON 데이터 쓰기:
$user = new User; $user->name = 'thinkphp'; $user->info = [ 'email' => 'thinkphp@qq.com', 'nickname '=> '流年', ]; $user->save();
객체 메서드를 사용하여 JSON 데이터 쓰기
$user = new User; $user->name = 'thinkphp'; $info = new StdClass(); $info->email = 'thinkphp@qq.com'; $info->nickname = '流年'; $user->info = $info; $user->save();
Query data
Db 클래스 쿼리의 결과 유형이 다릅니다. 모델 자동으로 객체 모드로 변환됩니다.
$user = User::get(1); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
는 JSON 필드 데이터 쿼리도 지원할 수 있습니다.
$user = User::where('info->nickname','流年')->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
Db 쿼리와 동일합니다. 쿼리해야 하는 JSON 속성이 정수 유형인 경우 수동 매개변수 바인딩이 필요합니다.
$user = User::where('info->user_id',':user_id') ->bind(['user_id' => [10 ,\PDO::PARAM_INT]]) ->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年
V5.1.11+ 버전을 사용하는 경우 모델 클래스에서 JSON 필드의 속성 유형을 정의할 수 있으며, 해당 유형의 매개변수 바인딩 쿼리가 자동으로 수행됩니다.
<?php namespace app\index\model; use think\Model; class User extends Model { // 设置json类型字段 protected $json = ['info']; // 设置JSON字段的类型 protected $jsonType = [ 'user_id'=>'int' ]; }
정의된 유형이 없는 속성은 기본적으로 문자열 유형이므로 문자열 유형 속성을 정의할 필요가 없습니다.
데이터 업데이트
JSON 데이터 업데이트에도 객체가 사용됩니다
$user = User::get(1); $user->name = 'kancloud'; $user->info->email = 'kancloud@qq.com'; $user->info->nickname = 'kancloud'; $user->save();
JSON 유형 필드에 대해 더 복잡한 작업을 수행해야 하는 경우 exp 표현식을 통해 수행할 수도 있습니다. 이는 모든 사람이 더 많은 JSON 사용법을 발견하기를 기다리고 있습니다.
PHP 중국어 웹사이트에는 무료 ThinkPHP 입문 튜토리얼이 많이 있습니다. 누구나 배울 수 있습니다!
이 기사는 https://blog.thinkphp.cn/784281
에서 복제되었습니다.위 내용은 ThinkPHP: JSON 필드 유형(ORM) 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

PHP 배열을 JSON으로 변환하기 위한 성능 최적화 방법은 다음과 같습니다. JSON 확장 및 json_encode() 함수를 사용하여 문자 이스케이프를 방지하고 버퍼를 사용하여 JSON 인코딩 결과 캐싱을 고려합니다. JSON 인코딩 라이브러리.

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

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

Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 제어합니다. 직렬화: @JsonIgnore: 속성 무시 @JsonProperty: 이름 지정 @JsonGetter: get 메서드 사용 @JsonSetter: set 메서드 사용 역직렬화: @JsonIgnoreProperties: @JsonProperty 속성 무시: 이름 지정 @JsonCreator: 생성자 사용 @JsonDeserialize: 사용자 정의 논리

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