PHP 프레임워크 ThinkPHP ThinkPHP: JSON 필드 유형(ORM) 사용

ThinkPHP: JSON 필드 유형(ORM) 사용

Dec 16, 2019 pm 03:52 PM
json orm thinkphp 필드 유형

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 = [&#39;info&#39;];
}
로그인 후 복사

json 속성은 여러 필드 이름 정의도 지원합니다. 정의 후 다음 JSON 데이터 작업을 수행할 수 있습니다.

데이터 쓰기

배열 메서드를 사용하여 JSON 데이터 쓰기:

$user = new User;
$user->name = &#39;thinkphp&#39;;
$user->info = [
&#39;email&#39;    => &#39;thinkphp@qq.com&#39;,
    &#39;nickname &#39;=> &#39;流年&#39;,
];
$user->save();
로그인 후 복사

객체 메서드를 사용하여 JSON 데이터 쓰기

$user = new User;
$user->name = &#39;thinkphp&#39;;
$info = new StdClass();
$info->email = &#39;thinkphp@qq.com&#39;;
$info->nickname = &#39;流年&#39;;
$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(&#39;info->nickname&#39;,&#39;流年&#39;)->find();
echo $user->name; // thinkphp
echo $user->info->email; // thinkphp@qq.com
echo $user->info->nickname; // 流年
로그인 후 복사

Db 쿼리와 동일합니다. 쿼리해야 하는 JSON 속성이 정수 유형인 경우 수동 매개변수 바인딩이 필요합니다.

$user = User::where(&#39;info->user_id&#39;,&#39;:user_id&#39;)
->bind([&#39;user_id&#39; => [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 = [&#39;info&#39;];
    
    // 设置JSON字段的类型
    protected $jsonType = [
    &#39;user_id&#39;=>&#39;int&#39;
    ];
}
로그인 후 복사

정의된 유형이 없는 속성은 기본적으로 문자열 유형이므로 문자열 유형 속성을 정의할 필요가 없습니다.

데이터 업데이트

JSON 데이터 업데이트에도 객체가 사용됩니다

$user = User::get(1);
$user->name = &#39;kancloud&#39;;
$user->info->email = &#39;kancloud@qq.com&#39;;
$user->info->nickname = &#39;kancloud&#39;;
$user->save();
로그인 후 복사

JSON 유형 필드에 대해 더 복잡한 작업을 수행해야 하는 경우 exp 표현식을 통해 수행할 수도 있습니다. 이는 모든 사람이 더 많은 JSON 사용법을 발견하기를 기다리고 있습니다.

PHP 중국어 웹사이트에는 무료 ThinkPHP 입문 튜토리얼이 많이 있습니다. 누구나 배울 수 있습니다!

이 기사는 https://blog.thinkphp.cn/784281

에서 복제되었습니다.

위 내용은 ThinkPHP: JSON 필드 유형(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 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++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 배열을 JSON으로 변환하기 위한 성능 최적화 팁 PHP 배열을 JSON으로 변환하기 위한 성능 최적화 팁 May 04, 2024 pm 06:15 PM

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

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

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

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

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

Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 어떻게 제어합니까? Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 어떻게 제어합니까? May 06, 2024 pm 10:09 PM

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

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

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

See all articles