>백엔드 개발 >PHP 튜토리얼 >ThinkPHP5의 데이터베이스 및 모델 사용 정보

ThinkPHP5의 데이터베이스 및 모델 사용 정보

jacklove
jacklove원래의
2018-06-15 11:07:385157검색

1. TP5 데이터베이스 아키텍처

ThinkPHP5의 데이터베이스 및 모델 사용 정보

Db:  是TP5操作数据库的入口类。它的作用是为连接数据库做准备,我们只需要在database.php里填写相应的配置即可。
Connection: 是TP5的连接器类,因为TP5支持四种数据库(Mysql,Pgsql,Sqlite,Sqlsrv),所以TP5封装了一个类来提供统一的调用接口来支持我们连接数据库(这里的连接是惰性连接,只有在执行SQL的时候才会真正连接)。
Query: 查询器,因为不同数据库的SQL语句不同,所以封装了一个Query类来提供统一的接口,以实现不同数据库的CURD操作。查询器是TP5数据访问层的核心,它连接了Connection和Builder。
Builder: 生成器。这个类主要是把Query的查询参数生成相应的sql语句,然后把其返回给Connection供其使用。

2. 데이터베이스 액세스

TP5에는 데이터베이스 액세스를 위한 세 가지 방법이 있습니다:

  1. 네이티브 SQL 문.

Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
  1. Query constructor

ThinkPHP5의 데이터베이스 및 모델 사용 정보

위의 쿼리 메소드에서 찾기, 선택, 삽입, 업데이트, 삭제는 모두 쿼리 작업이고 나머지는 보조 작업이라는 점에 유의하세요. 반환되는 것은 객체이며 체인 호출을 지원합니다. 그러나 쿼리 작업이 실행되면 더 이상 호출할 수 없습니다.

다른 보조 작업의 순서는 영향을 미치지 않지만 동일한 보조 작업의 순서는 영향을 미칩니다.

不同的辅助操作,先后顺序没影响。Db::table('banner')->where('id', '>', '2')->order('update_time asc')->select();Db::table('banner')->order('update_time asc')->where('id', '>', '2')->select();
相同的查询操作,先后顺序有影响。
$list = Db::table('data')
    ->where('id', '>', 1)
    ->where('name', 'like', '%think%')
    ->order('id', 'desc')
    ->order('create_time', 'desc')
    ->limit(8)
    ->select();
$list = Db::table('data')
    ->where('name', 'like', '%think%')
    ->where('id', '>', 1)
    ->order('create_time', 'desc')
    ->order('id', 'desc')
    ->limit(8)
    ->select();
  1. Model

ORM 객체 관계 매핑 객체 관계 매핑

은 모델을 통해 우리 데이터베이스의 테이블에 매핑한 후, 운영 모델을 통해 데이터베이스를 운영하는 것입니다.

쿼리 생성자와 비교해 보겠습니다

// 查询操作$user = Db::table('user')->find(1);// 取值操作echo $user['name'];echo $user['email'];// 设置操作$user['name']  = 'topthink';$user['email'] = 'thinkphp@qq.com';// 更新操作Db::table('user')->update($user);

모델 연산이라면 다음 코드로 구현할 수 있습니다

// 查询操作$user = User::get(1);// 取值操作echo $user->name;
echo $user->email;// 设置操作$user->name  = 'topthink';$user->email = 'thinkphp@qq.com';// 更新操作$user->save();

이것은 모델 외부, 즉 컨트롤러에서의 값 획득 및 설정 연산이지만 모델 내부에서는 다음 방법이 사용됩니다.

// 取值操作echo $user->getData('name');
echo $user->getData('email');// 设置操作echo $user->data('name', 'SpawN');
echo $user->data('email', '123@qq.com');

CURD Operation of the model

create

Db 사용법:

Db::table('user')->insert([    'name' => 'spawn',    'email' => '123@qq.com'])

모델 사용법:

$user = new User;$user->save([    'name' => 'spawn',    'email' => '123@qq.com'])$user = User::create([    'name' => 'sapwn',    'email' => '123@qq.com'])

요약:

  • save(동적) 반환: 영향을 받음 레코드 번호

  • create(정적) 반환: 모델 객체 인스턴스(메서드는 직접 호출 가능)

Read

Db:

$user = Db::table('user')->where('id', 1)->find();

Model:

$user = User::get(1);

find와 select는 다음과 같습니다. 쿼리 생성자 메서드, get 및 모두 모델 메서드입니다. 하지만 모델은 쿼리 생성자를 기반으로 하기 때문에 모델은 find 및 select 메서드를 호출할 수 있지만 쿼리 생성자는 get 및 all 메서드를 호출할 수 없습니다.

요약:

메서드 함수 반환 값
get 단일 레코드 쿼리 모델 객체 인스턴스
find 쿼리 단일 레코드 모델 객체 인스턴스
all 기본 키를 기반으로 여러 레코드 쿼리 모델 객체 인스턴스가 포함된 배열 또는 데이터 세트
select 조건을 기반으로 여러 레코드 쿼리 모델 객체 인스턴스가 포함된 배열 또는 데이터 세트

Update

Db :

Db::table('user')->where('id', 1)->update([    'name' => 'haha',    'email' => 'heihei@qq.com'])

모델:

$user = User::get(1);$user->save([    'name' => 'haha',    'email' => 'heihei@qq.com'])

或者 

User::update([    'name'  => 'topthink',    'email' => 'topthink@qq.com',
], ['id' => 1]);

요약:

메소드 함수 반환 값
save 데이터 업데이트 영향을 받은 레코드 수
update 업데이트 데이터(정적) 모델 객체 인스턴스 반환

需要注意的是,模型的更新操作是只更新有变化的数据。性能比较好。

Delete

Db:

Db::table('user')->delete(1);

Model :

$user = User::get(1);$user->delete();
或者
User::destory(1);

요약:

메서드 함수 반환 값
delete 현재 데이터 삭제 영향을 받은 레코드 수
destroy 지정된 데이터 삭제(정적) 영향을 받은 레코드 수

이제 모델의 기본 CURD 연산을 마스터했으므로 다음을 수행해 보겠습니다. 방법 차이점을 요약합니다.

Usage Db 클래스 모델(동적) 모델(정적)
create insert save create
update update 저장 업데이트
read a 단일 찾기 find get
read multiple 선택 선택
delete delete delete destroy

이 문서 ThinkPHP5 데이터베이스 및 모델 사용에 대해 설명합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 참조하세요.

관련 권장사항:

thinkphp5.0 데이터베이스 운영에 대한 사례 연구

ThinkPHP5와 ThinkPHP3의 유사점과 차이점을 나열해 보세요

가장 간단한 ThinkPhp 프로젝트 만들기

위 내용은 ThinkPHP5의 데이터베이스 및 모델 사용 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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