>  기사  >  PHP 프레임워크  >  ThinkPHP 5.0에서 모델을 사용하는 방법에 대해 이야기해 보겠습니다.

ThinkPHP 5.0에서 모델을 사용하는 방법에 대해 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-04-21 10:12:221289검색

ThinkPHP 5.0은 중국에서 가장 널리 사용되는 PHP 개발 프레임워크 중 하나입니다. 핵심 코드를 많이 최적화하고 개선했을 뿐만 아니라 많은 새로운 기능과 기능을 추가했으며 그 중 모델도 큰 주목을 받았습니다. . 업그레이드. 이 기사에서는 ThinkPHP 5.0에서 모델을 사용하는 방법을 자세히 소개합니다.

1. 모델이란 무엇입니까?

모델은 단순히 데이터베이스를 운영하는 데 사용되는 데이터 작업 클래스입니다. ThinkPHP에서 모델은 데이터 테이블을 캡슐화하여 데이터 테이블에서 편리하고 빠른 작업을 가능하게 합니다. 모델을 생성할 때 수많은 쿼리와 SQL 문을 작성하는 대신 ThinkModel만 상속하면 됩니다.

2. 간단한 모델 생성

  1. ThinkPHP 5.0에서 먼저 모델을 생성하세요

ThinkPHP 5.0에서는 모델 생성이 매우 간단합니다. 애플리케이션 디렉토리에 새로운 모델 디렉토리를 생성하면 됩니다. model 디렉터리에 다음 코드를 사용하여 User.php라는 새 파일을 만듭니다.

<?php

namespace app\model;

use think\Model;

class User extends Model
{
}
  1. Connect to the 데이터베이스

ThinkPHP 5.0은 기본적으로 PDO를 사용하여 데이터베이스에 연결하며 데이터베이스 연결 정보가 구성됩니다. 애플리케이션 디렉토리의 Database.php 파일에 있습니다. 연결이 성공하면 모델에서 해당 작업을 수행할 수 있습니다.

  1. 모델의 기본 CRUD 작업

ThinkPHP 5.0에서는 모델의 기본 CRUD 작업이 캡슐화되어 직접 호출할 수 있습니다. 가장 일반적인 CRUD 작업을 보여주기 위해 User 모델을 예로 들어 보겠습니다.

(1) 데이터 삽입

$user = new User();

$user->name = 'Tom';
$user->age = 20;

$user->save();

위는 데이터를 삽입하는 가장 일반적인 방법입니다. User 객체를 인스턴스화한 다음 다음을 통해 객체에 값을 할당합니다. 속성을 지정하고 마지막으로 save() 메소드를 호출하여 데이터를 데이터베이스에 저장합니다.

(2) 데이터 삭제

User::destroy(1);

여기서 1은 삭제할 데이터의 ID입니다. 여러 개의 데이터를 삭제하려면 배열을 전달하면 됩니다. 조건부 삭제를 위해 where 메소드를 사용할 수도 있습니다.

(3) 데이터 쿼리

// 查询所有数据
$users = User::all();

// 根据条件查询单条数据
$user = User::where('name', 'Tom')->find();

// 根据条件查询多条数据
$users = User::where('age', '>', 18)->select();

(4) 데이터 업데이트

$user = User::get(1);

$user->name = 'Jack';

$user->save();

즉, 수정할 데이터를 먼저 쿼리한 후, 데이터 수정 후 save() 메소드를 통해 데이터베이스에 저장하는 것입니다.

3. 모델 상관 연산

실제 개발에서는 여러 데이터 테이블에 대한 복잡한 공동 쿼리 및 상관 연산이 필요한 경우가 많습니다. ThinkPHP 5.0 모델은 테이블 간의 연관 문제를 신속하게 해결할 수 있는 풍부한 연관 작업을 제공합니다.

  1. 일대일 연관

ThinkPHP 5.0에는 일대일 연관의 세 가지 방법이 있습니다.

(1) 연관 모델 속성

class User extends Model
{
    public function profile()
    {
        return $this->hasOne('Profile');
    }
}

class Profile extends Model
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

$user = User::get(1);

$profile = $user->profile;

위 코드에서 User 모델과 Profile 모델은 hasOne() 메서드를 통해 결합한 다음 $user->profile 속성을 호출하여 연관된 데이터를 가져옵니다.

(2) 관련 쿼리

$user = User::with('profile')->select();

$profile = $user->profile;

위 코드에서는 with() 메소드를 통해 관련 쿼리를 직접 수행한 후 $user->profile 속성을 호출하여 관련 데이터를 가져옵니다.

(3) 통합 쿼리

$user = User::field('name')
            ->join('profile', 'profile.user_id=user.id')
            ->select();

$profile = $user->profile;

위 코드에서는 Join() 메서드를 통해 User 테이블과 Profile 테이블을 연결한 후 필드 표현식에서 Profile 테이블의 필드를 가져올 수 있습니다.

  1. 일대다 연관

ThinkPHP 5.0에는 일대다 연관의 세 가지 방법도 있습니다:

(1) 연관 모델 속성

class User extends Model
{
    public function books()
    {
        return $this->hasMany('Book');
    }
}

class Book extends Model
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

$user = User::get(1);

$books = $user->books;

위 코드에서 User 모델과 Book hasMany() 메소드를 통해 연결됩니다. 모델을 연결한 후 $user->books 속성을 호출하여 관련 데이터를 가져옵니다.

(2) 관련 쿼리

$user = User::with('books')->select();

$books = $user->books;

위 코드에서는 with() 메소드를 통해 관련 쿼리를 직접 수행한 후 $user->books 속성을 호출하여 관련 데이터를 가져옵니다.

(3) 통합 쿼리

$user = User::field('name')
            ->join('book', 'book.user_id=user.id')
            ->select();

$books = $user->books;

위 코드에서는 Join() 메소드를 통해 User 테이블과 Book 테이블을 연결한 후, 필드 표현식에서 Book 테이블의 필드를 얻을 수 있습니다.

  1. 다대다 연관

다대다 연관에는 ThinkPHP 5.0에도 세 가지 방법이 있습니다:

(1) 주 모델 연관 모델 속성

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany('Role');
    }
}

class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany('User');
    }
}

$user = User::get(1);

$roles = $user->roles;

위 코드에서 사용자 모델과 역할은 다음과 같습니다. ownToMany() 메소드를 통해 연결됩니다. 모델을 연결한 후 $user->roles 속성을 호출하여 관련 데이터를 가져옵니다.

(2) 중간 테이블을 별도로 쿼리

$user = User::get(1);

$roles = $user->roles()
            ->where('status', '1')
            ->select();

위 코드에서 $user->roles() 메서드를 호출하여 중간 테이블을 얻은 후 where() 메서드를 사용하여 조건부 쿼리를 수행합니다.

(3) 중간 테이블 통합 쿼리

$user = User::field('name,role.name as rolename')
            ->join('user_role','user_role.user_id=user.id')
            ->join('role', 'user_role.role_id=role.id')
            ->select();

$roles = $user->roles;

위 코드에서는 Join() 메소드를 통해 User 테이블, UserRole 테이블, Role 테이블을 연결한 후 필드 표현식에서 Role 테이블의 필드를 얻을 수 있습니다. .

4. 모델 이벤트

ThinkPHP 5.0 모델 이벤트는 모델의 수명 주기에 많은 유용한 후크를 제공하여 다양한 시간과 단계에서 데이터를 운영하고 처리할 수 있으며 데이터 검증 및 자동 채우기를 쉽게 구현할 수 있습니다. 업데이트 및 기타 기능. 일반적으로 사용되는 이벤트는 다음과 같습니다.

(1) 사전 쿼리 이벤트

class User extends Model
{
    protected static function onBeforeFind($query)
    {
        // before find event
    }
}

위 코드에서는 onBeforeFind() 메서드를 통해 사전 쿼리 이벤트가 추가되었습니다.

(2) 사전 삽입 이벤트

class User extends Model
{
    protected static function onBeforeInsert($data)
    {
        // before insert event
    }
}

위 코드에서 onBeforeInsert() 메서드를 통해 사전 삽입 이벤트를 추가합니다.

(3) 사전 업데이트 이벤트

class User extends Model
{
    protected static function onBeforeUpdate($data)
    {
        // before update event
    }
}

위 코드에서 onBeforeUpdate() 메서드를 통해 사전 업데이트 이벤트를 추가합니다.

(4) 사전 삭제 이벤트

class User extends Model
{
    protected static function onBeforeDelete($data)
    {
        // before delete event
    }
}

위 코드에서 onBeforeDelete() 메소드를 통해 사전 삭제 이벤트를 추가합니다.

5. 요약

이 기사의 소개를 통해 ThinkPHP 5.0의 모델은 사용이 매우 간단하고 CRUD 작업과 일반적으로 사용되는 관련 쿼리를 지원한다는 것을 알 수 있습니다. 동시에 모델 이벤트는 데이터 검증, 자동 채우기, 데이터 업데이트 등의 기능을 쉽게 구현할 수 있습니다. 심층 학습 모델을 사용하면 개발 효율성이 향상되고 프로젝트 개발 프로세스가 가속화될 수 있습니다.

위 내용은 ThinkPHP 5.0에서 모델을 사용하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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