tp 5.1 프레임 워 크 데이터베이스 에서 흔히 볼 수 있 는 조작 상세 설명[추가,삭제,업데이트,조회]

15741 단어 tp5.1데이터 뱅 크
본 고의 실례 는 tp 5.1 프레임 워 크 데이터베이스 에서 흔히 볼 수 있 는 조작 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
tp 5.1--데이터베이스 추가 작업
Db 클래스insert방법 으로 데이터베이스 에 데 이 터 를 제출 합 니 다.

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data);

insert방법 으로 데 이 터 를 추가 하여 성공 적 으로 추 가 된 항목 수 를 성공 적 으로 되 돌려 줍 니 다.일반적인 상황 은 1 을 되 돌려 줍 니 다.
또는data방법 으로 배합insert하여 사용한다.

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')
  ->data($data)
  ->insert();

데이터 시트 에 foo 나 bar 필드 가 없 으 면 이상 을 던 집 니 다.
이상 을 던 지지 않 으 려 면 다음 방법 을 사용 하 세 요.

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->strict(false)->insert($data);

존재 하지 않 는 필드 의 값 은 바로 버 려 집 니 다.
my sql 데이터베이스 라면 쓰기replace를 지원 합 니 다.예 를 들 어:

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data, true);

데 이 터 를 추가 한 후 새로 추 가 된 데 이 터 를 되 돌려 주 는 홈 키 가 필요 하 다 면insertGetId방법 으로 데 이 터 를 추가 하고 홈 키 값 을 되 돌려 줄 수 있 습 니 다.

$userId = Db::name('user')->insertGetId($data);
insertGetId방법 으로 데 이 터 를 추가 하 는 데 성공 했다.
여러 데이터 추가
여러 개의 데 이 터 를 추가 하여 Db 클래스insertAll방법 으로 추가 할 데 이 터 를 직접 입력 하면 됩 니 다.

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],
  ['foo' => 'bar1', 'bar' => 'foo1'],
  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);

insertAll방법 으로 데 이 터 를 추가 하 는 데 성공 한 항목 수 를 되 돌려 주 었 습 니 다.
my sql 데이터베이스 라면 쓰기replace를 지원 합 니 다.예 를 들 어:

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],
  ['foo' => 'bar1', 'bar' => 'foo1'],
  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data, true);

데이터 추가
데이터 추가
Db 클래스 의 insert 방법 으로 데이터베이스 에 데 이 터 를 제출 합 니 다.

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data);

insert방법 으로 데 이 터 를 추가 하여 성공 적 으로 추 가 된 항목 수 를 성공 적 으로 되 돌려 줍 니 다.일반적인 상황 은 1 을 되 돌려 줍 니 다.
또는data방법 으로 배합insert하여 사용한다.

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')
  ->data($data)
  ->insert();

데이터 시트 에 foo 나 bar 필드 가 없 으 면 이상 을 던 집 니 다.
이상 을 던 지지 않 으 려 면 다음 방법 을 사용 하 세 요.

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->strict(false)->insert($data);

존재 하지 않 는 필드 의 값 은 바로 버 려 집 니 다.
my sql 데이터베이스 라면 쓰기replace를 지원 합 니 다.예 를 들 어:

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data, true);

데 이 터 를 추가 한 후 새로 추 가 된 데 이 터 를 되 돌려 주 는 홈 키 가 필요 하 다 면insertGetId방법 으로 데 이 터 를 추가 하고 홈 키 값 을 되 돌려 줄 수 있 습 니 다.

$userId = Db::name('user')->insertGetId($data);

insertGetId 방법 으로 데 이 터 를 추가 하여 데 이 터 를 추가 한 홈 키 를 성공 적 으로 되 돌려 주 었 습 니 다.
여러 데이터 추가
여러 개의 데 이 터 를 추가 하여 Db 클래스insertAll방법 으로 추가 할 데 이 터 를 직접 입력 하면 됩 니 다.

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],
  ['foo' => 'bar1', 'bar' => 'foo1'],
  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);

insertAll방법 으로 데 이 터 를 추가 하 는 데 성공 한 항목 수 를 되 돌려 주 었 습 니 다.
my sql 데이터베이스 라면 쓰기replace를 지원 합 니 다.예 를 들 어:

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],
  ['foo' => 'bar1', 'bar' => 'foo1'],
  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data, true);

사용 가능data방법

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],
  ['foo' => 'bar1', 'bar' => 'foo1'],
  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->data($data)->insertAll();

대량으로 추가 할 데이터 필드 가 일치 하 는 지 확인 하 십시오.
만약 에 대량으로 삽 입 된 데이터 가 비교적 많 으 면 분할 삽입 을 지정 할 수 있 고limit방법 으로 매번 삽 입 된 수량 제한 을 지정 할 수 있 습 니 다.

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],
  ['foo' => 'bar1', 'bar' => 'foo1'],
  ['foo' => 'bar2', 'bar' => 'foo2']
  ...
];
//          100   
Db::name('user')->data($data)->limit(100)->insertAll();

tp 5.1--데이터베이스 삭제 작업
데이터 삭제

//       
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
 
//       
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<',10)->delete();

마지막 으로 생 성 된 SQL 문 구 는 다음 과 같 습 니 다.

DELETE FROM `think_user` WHERE `id` = 1 
DELETE FROM `think_user` WHERE `id` IN (1,2,3) 
DELETE FROM `think_user` WHERE `id` = 1 
DELETE FROM `think_user` WHERE `id` < 10 

delete 방법 은 데이터 에 영향 을 주 는 항목 수 를 되 돌려 줍 니 다.0 을 삭제 하지 않 았 습 니 다.
조건 없 이 호출delete방법 은 오 류 를 알려 줍 니 다.모든 데 이 터 를 삭제 해 야 한다 면 사용 할 수 있 습 니 다.

//          
Db::name('user')->delete(true);

마지막 으로 생 성 된 SQL 문 구 는(표 의 모든 데 이 터 를 삭 제 했 습 니 다):

DELETE FROM `think_user`

일반적인 상황 에서 업무 데 이 터 는 실제 데 이 터 를 삭제 하 는 것 을 권장 하지 않 고 시스템 은 소프트 삭제 체 제 를 제공 합 니 다(모델 에서 소프트 삭 제 를 사용 하 는 것 이 더욱 편리 합 니 다).

//         delete_time      
Db::name('user')
 ->where('id', 1)
 ->useSoftDelete('delete_time',time())
  ->delete();

실제 생 성 된 SQL 문 구 는 다음 과 같 을 수 있 습 니 다UPDATE.

UPDATE `think_user` SET `delete_time` = '1515745214' WHERE `id` = 1

useSoftDelete방법 은 소프트 삭 제 를 사용 하고 소프트 삭제 필드 를 delete 로 지정 합 니 다.time,데 이 터 를 현재 시간 스탬프 로 기록 합 니 다.
tp 5.1--데이터베이스 업데이트 작업
데이터 업데이트

Db::name('user')
  ->where('id', 1)
  ->update(['name' => 'thinkphp']);

실제 생 성 된 SQL 문 구 는 다음 과 같 습 니 다.

UPDATE `think_user` SET `name`='thinkphp' WHERE `id` = 1

update방법 은 데이터 에 영향 을 주 는 항목 수 를 되 돌려 주 고 데이터 반환 0 을 수정 하지 않 았 습 니 다.
업데이트 할 데 이 터 를 전송 하 는 데 사용data방법 을 지원 합 니 다.

Db::name('user')
  ->where('id', 1)
  ->data(['name' => 'thinkphp'])
  ->update();

update방법 과data방법 이 동시에 업데이트 데 이 터 를 전송 하면 합병 된다.
데이터 에 홈 키 가 포함 되 어 있 으 면 바로 사용 할 수 있 습 니 다:

Db::name('user')
  ->update(['name' => 'thinkphp','id'=>1]);

실제 생 성 된 SQL 문 구 는 앞의 용법 과 같 습 니 다.

UPDATE `think_user` SET `name`='thinkphp' WHERE `id` = 1

데 이 터 를 업데이트 하려 면 SQL 함수 나 다른 필드 를 사용 해 야 합 니 다.다음 방법 을 사용 할 수 있 습 니 다.

Db::name('user')
  ->where('id',1)
  ->inc('read_time')
  ->dec('score',3)
  ->exp('name','UPPER(name)')
  ->update();

실제 생 성 된 SQL 구문:

UPDATE 
  `think_user` 
SET 
  `read_time` = `read_time` + 1 , 
  `score` = `score` - 3 , 
  `name` = UPPER(name) 
WHERE 
  `id` = 1

V 5.1.7+버 전 이후raw방법 으로 데이터 업 데 이 트 를 지원 하여 배열 업데이트 에 적합 합 니 다.

Db::name('user')
  ->where('id', 1)
  ->update([
    'name' => Db::raw('UPPER(name)'),
    'score' => Db::raw('score-3'),
    'read_time' => Db::raw('read_time+1')
  ]);

필드 값 업데이트

Db::name('user')
  ->where('id',1)
  ->setField('name', 'thinkphp');

마지막 으로 생 성 된 SQL 문 구 는 다음 과 같 을 수 있 습 니 다.

UPDATE `think_user` SET `name` = 'thinkphp' WHERE `id` = 1

setField방법 은 데이터 에 영향 을 주 는 항목 수 를 되 돌려 주 고 데이터 필드 를 수정 하지 않 고 0 으로 되 돌려 줍 니 다.setInc/setDec방법 으로 한 필드 의 값 을 증가 하거나 줄 일 수 있 습 니 다(두 번 째 파 라 메 터 를 추가 하지 않 으 면 기본 걸음 길 이 는 1).

// score     1
Db::table('think_user')
  ->where('id', 1)
  ->setInc('score');
// score     5
Db::table('think_user')
  ->where('id', 1)
  ->setInc('score', 5);
// score     1
Db::table('think_user')
  ->where('id', 1)
  ->setDec('score');
// score     5
Db::table('think_user')
  ->where('id', 1)
  ->setDec('score', 5);

마지막 으로 생 성 된 SQL 문 구 는 다음 과 같 습 니 다.

UPDATE `think_user` SET `score` = `score` + 1 WHERE `id` = 1
UPDATE `think_user` SET `score` = `score` + 5 WHERE `id` = 1
UPDATE `think_user` SET `score` = `score` - 1 WHERE `id` = 1
UPDATE `think_user` SET `score` = `score` - 5 WHERE `id` = 1

setInc/setDec지연 업 데 이 트 를 지원 합 니 다.지연 업데이트 가 필요 하 다 면 세 번 째 매개 변 수 를 입력 하고 다음 예 에서 10 초 동안 업 데 이 트 를 지연 합 니 다.

Db::name('user')->where('id', 1)->setInc('score', 1, 10);

setInc/setDec방법 은 데이터 에 영향 을 주 는 항목 수 를 되 돌려 줍 니 다.업데이트 지연 을 사용 하면 true 로 돌아 갈 수 있 습 니 다.
tp 5.1--데이터베이스 조회 작업
selectOrFail();//데 이 터 를 찾 지 못 한 후 이상 을 던 집 니 다.

Db::table('think_user')->where('status',1)->selectOrFail();

findOrFail();//데 이 터 를 찾 지 못 한 후 이상 을 던 집 니 다.

Db::table('think_user')->where('id',1)->findOrFail();

findOrEmpty();//검색 이 존재 하지 않 을 때 빈 배열 로 돌아 갑 니 다.

Db::table('think_user')->where('id',1)->findOrEmpty();

필드 의 값 을 조회 합 니 다.결과 가 존재 하지 않 을 때 null 로 돌아 갑 니 다.

Db::table('think_user')->where('id',1)->value('name');

어떤 열의 값 을 조회 하 다

//     
Db::table('think_user')->where('status',1)->column('name');
//   id        
Db::table('think_user')->where('status',1)->column('name','id');

전체 데 이 터 를 되 돌려 주 고 색인 값 을 추가 합 니 다.검색 결과 가 존재 하지 않 습 니 다.빈 배열 로 돌아 갑 니 다.

//   id               
Db::table('think_user')->where('status',1)->column('*','id');

어떤 데이터 의 필드 값 을 되 돌려 줍 니 다.

Db::name('user')->where(['id' => 1])->value('name');

데이터 분할 처리
모든 사용자 표 데 이 터 를 분할 처리 하고 매번 100 개의 사용자 기록 을 처리 합 니 다.

Db::table('think_user')->chunk(100, function($users) {
  foreach ($users as $user) {
    //
  }
});
//         myUserIterator  
Db::table('think_user')->chunk(100, 'myUserIterator');

패 킷 함수 에서 되 돌아 오기false를 통 해 후속 데이터 세트 에 대한 처 리 를 중단 합 니 다.

Db::table('think_user')->chunk(100, function($users) {
  foreach ($users as $user) {
    //      ...
 if($user->status==0){
      return false;
    }
  }
});

chunk방법 전에 다른 조회 방법 을 호출 하 는 것 을 지원 합 니 다.예 를 들 어:

Db::table('think_user')
->where('score','>',80)
->chunk(100, function($users) {
  foreach ($users as $user) {
    //
  }
});

chunk방법의 처 리 는 기본적으로 홈 키 에 따라 조회 하고 지정 한 필드 를 지원 합 니 다.예 를 들 어:

Db::table('think_user')->chunk(100, function($users) {
  //      ...
  return false;
},'create_time');

또한 지정 한 처리 데이터 의 순 서 를 지원 합 니 다.

Db::table('think_user')->chunk(100, function($users) {
  //      ...
  return false;
},'create_time', 'desc');

chunk방법 은 일반적으로 명령 행 에서 데이터 베 이 스 를 일괄 처리 하 는 데 사용 되 며,WEB 접근 처리 에 적합 하지 않 아 시간 초과 가 발생 하기 쉽다.
대량 데이터 처리
대량의 데 이 터 를 처리 해 야 한다 면 새 버 전에 서 제공 하 는 커서 조회 기능 을 사용 할 수 있다.이 조회 방식 은 PHP 의 생 성기 특성 을 이용 하여 대량의 데이터 조회 메모리 점용 문 제 를 대폭 줄 일 수 있다.

$cursor = Db::table('user')->where('status', 1)->cursor();
foreach($cursor as $user){
 echo $user['name'];
}

cursor방법 은 생 성기 대상 을 되 돌려 주 고 user 변 수 는 데이터 시트 의 데이터(배열)입 니 다.
JSON 형식 데이터 조회(mysql)

//   JSON     (info   json  )
Db::table('think_user')
 ->where('info->email','[email protected]')
 ->find();

thinkpHP 와 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,ThinkpHP 입문 강좌,thinkpHP 템 플 릿 조작 기법 요약,ThinkPHP 상용 방법 총화,codeigniter 입문 강좌,CI(CodeIgniter)프레임 워 크 진급 강좌Zend FrameWork 프레임 워 크 입문 강좌.
본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기