| 1. 표현식 쿼리 표현식은 SQL 문의 조건입니다. 표현식은 대소문자를 구분하지 않습니다. 표현식은
Expression | 의미 | 쿼리 method | = | 은 |
| <> | 과 같지 않음 |
| > | 보다 큼 |
| > ;= | |
| < | 보다 크거나 같음 |
| <= | 보다 작거나 같음 |
| [좋아하지 않음] 좋아요 | 퍼지 쿼리 | whereLike/whereNotLike | [NOT] BETWEEN | (안) 간격 쿼리 | whereBetween/whereNotBetween | [NOT] IN | (안) IN 쿼리 | whereIn/whereNotIn | [NOT] NULL | 쿼리 필드 NULL 여부(아님) | whereNull/whereNotNull |
where Query
여기서 메소드는 체인 연산 방법 중 가장 일반적으로 사용되는 방식으로 일반 쿼리, 표현식 쿼리, 빠른 쿼리, 간격 쿼리, 결합 쿼리 등의 조건 쿼리 작업을 완료할 수 있습니다.
# Equal to (=) $select = Db::table('shop_goods')->where('id','=','1')->select(); print_r($select- > toArray());
# 같지 않음 (<>) $select = Db::table('shop_goods')->where('id','<>' , '2')->select(); print_r($select->toArray());
#보다 큼 (>) $select = Db::table('shop_goods' )->where('id','>','3')->select(); print_r($select->toArray());
# 크거나 같음 to (> ;=) $select = Db::table('shop_goods')->where('id','>=','4')->select(); print_r( $select- >toArray());
# 미만 (<) $select = Db::table('shop_goods')->where('id','<', '5') ->select(); print_r($select->toArray());
# 작거나 같음 (<=) $select = Db::table ('shop_goods')-> ;where('id','<=','6')->select(); print_r($select->toArray());
# 더보기 where $select + ;-& Gt; select () Print_r ($ select-& gt; toarray ());'like','%dress%')->select( ); print_r($select->toArray()); # NOT LIKE $select = Db:: table('shop_goods')->where('title','not like ','%dress%')->select();
print_r($select->toArray()); # BETWEEN $select = Db::table('shop_goods') ->where('id','between','6,10')->select();
print_r($select ->toArray()); # NOT BETWEEN $select = Db::table('shop_goods')->where('id','not between',[6,10]) ->select();
print_r($select->toArray( )); # IN $select = Db::table('shop_goods')->where('id' ,'in','4,7,10')->select( );
print_r($select->toArray()); # NOT IN$select = Db::table('shop_goods')->where('id','not in',[4,7,10])->select(); print_r($select-> ;toArray());
2. 데이터 테이블1, 테이블 및 이름 # 데이터베이스 이름을 완료해야 합니다 $select = Db::table('shop_goods')->where('id' ,'10')->select(); print_r($select->toArray()); # 데이터베이스에 접두어 세트가 없습니다 $select = Db::name('shop_goods')- > where('id','11')->select(); print_r($select->toArray()); # 데이터베이스 설정 접두사, 접두사 액세스 없음 $select = Db: :name ('list')->where('id','12')->select(); print_r($select->toArray());
2. 데이터베이스 접두사 데이터베이스 구성 database.php database.php return [ 'connections' => [ 'mysql' => [ // 数据库表前缀 'prefix' => Env::get('database.prefix', 'shop_'), ] ] ];
三、返回值1、field 3. 반환값 1. field field method main 반환되거나 연산될 필드를 식별하는 데 사용되며 쿼리 및 쓰기 작업에 사용할 수 있습니다. 메소드는 Shop_goods') -& gt; 필드('제목, 가격, 할인') -& gt; where ('Status', 1) -& gt; - & gt ;toArray());
# 배열 $select = Db::table('shop_goods') ~ discount'=>'d' - # 추가, 이 필드만 추가할 수 있습니다# 여러 필드$data = [ '제목' => '신상품', '가격' => 할인' => 8, 'add_time' => 1576080000
]; $insert = Db::table('shop_goods') ; -& GT; 필드('제목') -& GT; 필드('가격') -& GT; 필드('할인') - & gt; $data 삽입);print_r($insert);# 모든 필드를 더 빠르게 쿼리
$select = Db::table('shop_goods') - ->field(true ) // ->field('*') - ->where('status',1) - ->select();print_r($select->toArray() ); 2. withoutField withoutField 메서드는 데이터 테이블의 필드를 제외합니다withoutField
Db::table('shop_goods')->withoutField('id')->select(); 3、fieldRaw Db::table('shop_goods')->fieldRaw('id,sum(price)')->select(); 四、排序
1、order 方法用于对操作的结果排序或者优先级限制 $select = Db::table('shop_goods') ->field('title,price,id') ->where('status',1) ->order('price','DESC') ->order('id','DESC') ->select(); print_r($select->toArray());
2、orderRaw 方法中使用mysql函数 $select = Db::table('shop_goods') ->field('title,price,id') ->where('status',1) ->orderRaw("field(title,'price','discount','stock')") ->select(); print_r($select->toArray());
五、分页fieldRaw 메소드는 mysql 함수$select = Db::table('shop_goods')->fetchSql()->select();
echo $select; 를 직접 사용합니다. 4. 정렬1. order 메소드는 작업 결과를 정렬하거나 우선순위를 지정하는 데 사용됩니다 기본 정방향 순서 🎜- 🎜asc 정방향 순서🎜🎜
- 🎜desc 역방향 순서🎜🎜🎜🎜🎜$select = Db::table('shop_goods')🎜 🎜 - ->field(' 제목, 가격, ID')🎜🎜 - ->where('상태',1)🎜🎜 - ->order('가격','DESC')🎜🎜 - -> ;order('id','DESC') ; -& Gt; select (); 🎜🎜Print_r ($ select -& gt; toarray ()) 🎜🎜🎜2,
Orderraw 메소드는 mysql 함수 🎜🎜🎜 $ select = db :: table ('shop_goods') 🎜🎜 -& gt; 필드 ('제목, 가격, ID') 🎜🎜 -& gt; where ('status', 1) 🎜🎜 - & gt; orderRaw ("fIELD (제목, '가격' 할인', '재고')")🎜🎜 - ->select();🎜🎜print_r($select->toArray());🎜🎜< h2>5. 페이징- 🎜
limit 메소드는 주로 쿼리 및 작업 수를 지정하는 데 사용됩니다🎜🎜 🎜🎜🎜$select = Db::table('shop_goods')🎜 🎜 ~ .; -& Gt; 제한(3) -& gt; select () Print_r ($ select -& gt; toarray ()) $ select = db :: table ('shop_goods' ) ->field('제목, 가격, ID') - ->where('상태',1)
- ->order('가격','DESC') - - >limit(0, ( 'shop_goods') - ->field('제목, 가격, ID') - ->where('상태',1) - ->order(' Price','DESC') - >page(1,5) - ->select();
print_r($select->toArray());Aggregation 방식 데이터가 없는 경우 기본값은 0이며, 집계 쿼리는 다른 쿼리 조건과 일치할 수 있습니다. 메서드 함수 count count 수량, 매개변수는 다음과 같습니다. 계산할 필드 이름(선택 사항) min 최소값을 가져옵니다. 매개변수는 필드입니다. 계산할 이름(필수) | | avg 평균값 가져오기, 계산할 매개변수 필드 이름(필수) | | sum 은 총 개수 가져오기, 매개변수는 계산할 필드 이름 계산됩니다(필수) | | // 수량 계산, 매개변수는 계산할 필드 이름입니다(선택 사항) $select = Db::table('shop_goods')->count(); print_r($select);
// 최대값 가져오기, 매개변수는 계산할 필드 이름입니다(필수) $select = Db::table('shop_goods')->max('id'); print_r ($select);
// 최소값을 구합니다. 매개변수는 계산할 필드 이름입니다(필수) $select = Db::table('shop_goods')->min('id '); print_r($ select);
// 평균값을 구합니다. 매개변수는 계산할 필드 이름입니다(필수) $select = Db::table('shop_goods')- >avg('id'); print_r($select);
// 총 개수를 가져옵니다. 매개변수는 계산할 필드 이름입니다(필수) $select = Db::table ('shop_goods')->sum('id'); print_r($select);
7. 검색 및 정렬 예제controller code public function index(){ $title = 'mall'; $login = 'Ouyang Ke'; # 왼쪽 메뉴 $menu = Db::table('shop_menu')->where('fid',0)->select() ; $left = $menu->toArray() ; foreach($left as &$left_v){ $left_v['lists'] = Db::table('shop_menu')->where ('fid',$left_v['id'])- >select(); } # 오른쪽 목록 $param = 요청::param(); if(isset($param[' status']) && $param['status'] = = 1){ $where['status'] = 2; }else{ 사용 사용 사용 사용 사용 사용 ' '를 사용하여 사용을 통해 ' '를 사용하여 ‐ ‐ ‐ ‐ a -> ;order('add_time DESC') ~ &$right_v){ $right_v['cat'] = Db: :table('shop_cat')->where('id',$right_v['cat'])->value('name') } e 보기 :: 할당 ([ '제목' = & gt; $ 테이블, '로그인' = & gt $ 로그인, , '왼쪽' => $왼쪽, '오른쪽' => $맞습니다 '상태' => isset($param['status']) ? $param['status'] : null ]); return View::fetch(); }
view代码 <form class="layui-form" method="post" > <div class="layui-form-item" style="margin-top:10px;"> <div class="layui-input-inline"> <이름 선택 ="status"> <옵션 값="0" {if $status==0}선택됨{/if}>전부</option> <옵션 값="1" {if $ status==1}선택됨{/if}>开启</option> <option value="2" {if $status==2}선택됨{/if}>关闭</option> </select> </div> <button class="layui-btnlayui-btn-primary"> </div># 왼쪽 메뉴 $menu = Db::table('shop_menu')->where('fid',0)->select(); $left = $menu->toArray(); foreach($left as &$left_v){ $left_v['lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])-> (); } # 오른쪽 목록 $param = Request::param(); if(isset($param['status']) && $param['status'] == 1 ){ 사용 > using using using through through through through through off through off off ‐ ‐ ‐ to 총 통계 $count = Db::table(' shop_goods')->where($where)->count(); $list = Db::table('shop_goods') - -> where ($ when) -& gt; ('add_time desc') - & gt; 주문('ID desc') - & gt; 페이지($ p, 10) & gt; 선택(); right = $list->toArray(); foreach($right as &$right_v){ $right_v['cat'] = Db::table('shop_cat')->where( 'id' ,$right_v['cat'])-> 값('이름'); > $login, 사용 사용 사용 사용 사용 out out out through out through 's' ‐ ‐ ‐ ‐‐‐ '왼쪽 ' => $p, '상태' => isset($param['status']) ? $param['status'] : 0 코드 보기<div 클래스 ="layui-boxlayui-laypagelayui-laypage-default"> <a href="/index.php/Index/index?p={$p-1}&status={$status}" class="layui-laypage-prev {if $p<=1}layui-disabled {/if}">이전 페이지</a> {for start="0" end="$count"} > ~ </span> }</a> class="layui-laypage-next {if $p >=$count}layui-disabled{/if}">다음 페이지</a> </div> 9. 템플릿 페이징 paginate 에는 페이징 구현이 내장되어 있으며 데이터render Get에 페이지 매김 출력 기능을 추가하는 것은 매우 간단합니다. 페이지 넘김 html codetotal 총 수량 가져오기
foreach($select as $v){ print_r($v);echo '<hr>';}print_r( $select->render());echo ' <hr>';print_r('Total:'.$select->total());echo '<hr>';보기:: 할당([ 'select' => $ select]);return View::fetch();코드 보기 <div>{$select|raw}</div> css代码 .pagination { 디스플레이: inline-block; padding-left: 0; 여백: 20px 0; border-radius: 4px; } .페이지 매김 > li { 디스플레이: inline; } .pagination > 리 > a, .pagination > 리 > 범위 { 위치: 상대; 부동: 왼쪽; 패딩: 6px 12px; 여백 왼쪽: -1px; 줄 높이: 1.42857143; 색상: #337ab7; 텍스트 장식 : 없음; 배경색: #fff; 테두리: 1px 단색 #ddd; } .pagination > li:첫 번째 자식 > a, .pagination > li:첫 번째 자식 > 범위 { margin-left: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .pagination > li:마지막 자식 > a, .pagination > li:마지막 자식 > 범위 { border-top-right-radius: 4px; border-bottom-right-radius: 4px; } .pagination > 리 > a:hover, .pagination > 리 > 범위:hover, .pagination > 리 > a:focus, .pagination > 리 > 범위:초점 { z-색인: 2; 색상: #23527c; 배경색: #eee; 테두리 색상: #ddd; } .pagination > .활성 > a, .pagination > .활성 > 스팬, .pagination > .활성 > a:hover, .pagination > .활성 > 범위:hover, .pagination > .활성 > a:focus, .pagination > .활성 > 범위:초점 { z-색인: 3; 색상: #fff; 커서: 기본값; 배경색: #337ab7; 테두리 색상: #337ab7; } .pagination > .비활성화 > 스팬, .pagination > .비활성화 > 범위:hover, .pagination > .비활성화 > 범위:초점, .pagination > .비활성화 > a, .pagination > .비활성화 > a:hover, .pagination > .비활성화 > a:focus { color: #777; 커서: 허용되지 않음; background-color: #fff; border-color: #ddd; }
10. 템플릿 페이징 예Parameters | Description | list_rows | 페이지당 수량 | 페이지 | 현재 페이지 | path | url 경로 | 쿼리 | url 추가 매개변수 | fragment | url 앵커 | var_page | 페이징 변수 |
컨트롤러 코드 공용 함수 인덱스(){ $title = 'Mall'; $login = 'Ouyang Ke'; # 왼쪽 메뉴 $menu = Db::table('shop_menu' ) ->where('fid',0)->select(); $left = $menu->toArray(); foreach($left as &$left_v){ $left_v[ ' lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])->select(); } # 오른쪽 목록 $ param = 요청::param(); if(isset($param['status']) && $param['status'] == 1){ $where['status'] = 1; }else if(isset($param['status']) && $param['status'] == 2){ $where['status'] = 2; }else{ $where = true ; } $p = isset($param['p']) ? $param['p'] : 1; # thinkphp에는 페이징이 제공됩니다 $list = Db::table('shop_goods' ) ㅋㅋㅋ ([ > ~ ->어디('ID' ,$right_v['cat'])->value('name'); } 보기 :: 할당 ([ 'title' = & gt; $ table, 'login' = & gt ; $ 로그인, '왼쪽' = & gt; $ 왼쪽; '목록' => ();코드 보기 < ;div>{$paginate|raw};
11. SQL 디버깅// 启动事务
Db::startTrans();
$data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000];
$insert = Db::table('shop_goods')->insert($data);
if(empty($insert)){
// 回滚事务
Db::rollback();
}else{
// 提交事务
Db::commit();
} fetchSql
getLastSql 메소드는 마지막으로 실행된 SQL 레코드만 가져올 수 있습니다 Db::transaction(function () {
$data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000];
$insert = Db::table('shop_goods')->insert($data);
}); $select = Db::table('shop_goods')
->field('title,price,id')
->where('status',1)
->order('price','DESC')
->select();
if($select->isEmpty()){
echo '未查询到数据';
}else{
print_r($select->toArray());
} 를 실행하지 않고 현재 SQL을 직접 반환합니다. 12. 데이터베이스를 동적으로 구성합니다. config 디렉터리 Database.php 파일 return [ + ', 'mysql'을 입력하세요. ~ > > '사용자 이름' ' => Env::get('database .password', 'root'), ~ | ' => [], '접두사 '= & Gt; env :: get (' Database.prefix ',' shop _ '), // 데이터베이스 배포 방식: 0 집중(단일 서버), 1개 분산(메인 서버) ' 배포 '= >是否 // 데이터베이스 읽기 및 쓰기가 기본 유형으로 구분되는지 여부 'rw_sepalating' = & gt; false, // 읽고 쓰기 후의 기본 서버 수 'master_num' = & gt ; 1, // 서버 일련 번호 ''slave_no '= & gt;' ', // 필드가 존재하는지 여부를 엄격하게 확인 ' fields_strict '= & gt; , // 연결되지 않은 가중치 선 필요 ' break_reconnect '= & gt; false, // 监听SQL 'trigger_sql' => // 开启字段缓存 ' fields_cache' => false, // 字段缓存路径 'schema_cache_path' => app()->getRuntimePath() 'schema' . ] CREATE TABLE `shop_user` ( `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '사용자 ID', `account` varchar(50) NOT NULL COMMENT '계정', `password` char(32) NOT NULL COMMENT 'Password', `name` varchar(50) NOT NULL COMMENT '이름', `status`tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '상태 1 on 2 off',
`add_time` int(10) unsigned NOT NULL COMMENT '시간 추가', PRIMARY KEY (`uid`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='백엔드 관리자'; 연결 데이터베이스 연결 정보를 동적으로 구성하는 방법 Db::connect('ouyangke')->table('shop_user')->select();connect 방법이 필요합니다. 쿼리 시작 시 호출되며 쿼리 메서드가 뒤에 와야 합니다. 그렇지 않으면 일부 쿼리가 실패하거나 기본 데이터베이스 연결이 계속 사용될 수 있습니다
13. WHRER 체인 연산(일반적으로 사용되지 않음)일관적인 작업 | Function | 지원되는 매개변수 유형 | whereOr* | OR 쿼리용 | 문자열, 배열 및 객체 | whereLike* | F uzzy 쿼리 | 문자열 | whereNotLike* | 퍼지 쿼리 | String | whereBetween* | 간격 쿼리 | String | whereNotBetween* | 간격 쿼리에 포함되지 않음 | String | whereIn* | IN 쿼리 | string | whereNotIn* | Not in IN 쿼리 | string | whereNull* | 필드가 NULL인지 쿼리 | string | where NotNull* | que ry field NULL이 아닌가요 | String | whereExists* | EXISTS 쿼리 | String | whereNotExists* | EXISTS 쿼리에 없음 | String | whereBetweenTime* | 시간 간격 비교 | String | whereTime* | 시간 및 날짜에 대한 빠른 쿼리 | String | whereExp* | 표현식 쿼리, SQL 구문 지원 | String | whereFindInSet* | FIND_IN_SET 쿼리 | String | whereRaw* | 은 문자열 조건의 직접 쿼리 및 연산에 사용됩니다. | 문자 |
14. 기타 체인 연산(일반적으로 사용되지 않음) 연속 연산 | 함수 | 지원되는 매개변수 유형 | 별칭 | 은 현재 데이터 테이블의 별칭을 정의하는 데 사용됩니다. | 문자열 | strict | 는 필드 이름이 존재하는지 엄격하게 감지할지 여부를 설정하는 데 사용됩니다. | 부울 값 | group | 은 쿼리에 대한 그룹 지원에 사용됩니다. | 문자열 | having | 은 다음을 지원하는 데 사용됩니다. 쿼리 | String | join* | 쿼리 조인 지원 | 문자열 및 배열 | union* | 쿼리 통합 지원 | 문자열, 배열 및 개체 | distinct | 뚜렷한 쿼리 지원 | | 잠금 데이터베이스에 대한 잠금 메커니즘 | 부울 | | 캐시 쿼리 캐시용 | 여러 매개변수 지원 | | 댓글 SQL 주석의 경우 | String | | force | 는 데이터 세트의 강제 인덱싱에 사용됩니다. | 문자열 | partition | 은 파티션 정보를 설정하는 데 사용됩니다. | 배열 문자열 | failException | 은 데이터가 없는지 여부를 설정하는 데 사용됩니다. 질문했다 또는 발생하지 않음 예외 | Boolean 값 | sequence | 은 자동 증가 시퀀스 이름을 설정하는 데 사용됩니다. | 문자열 | replace | 는 | Boolean 값을 작성하는 REPLACE 메서드를 설정하는 데 사용됩니다. | extra | Use 추가 쿼리 규칙 설정에 사용 | String | duplicate | DUPLCATE 정보 설정에 사용 | Array string | Procedure 여부 설정에 사용 현재 쿼리는 저장 프로시저 쿼리입니다. | boolean ean | | master | | 는 마스터 서버가 데이터를 읽도록 설정하는 데 사용됩니다.15. 트랜잭션 작업
rrreeerrreee十六、数据集数据库通过select查询,得到的数据集对象 返回的数据集对象是thinkCollection rrreee🎜🎜< code>transaction 메소드는 클로저의 코드에서 예외가 발생하면 자동으로 롤백됩니다🎜rrreee🎜16. 데이터 세트🎜🎜🎜🎜 select를 통해 쿼리됩니다. 데이터 세트 개체 🎜🎜🎜반환된 데이터 세트 개체는 thinkCollection 이며, 이는 배열과 동일한 사용법을 제공하고 몇 가지 추가 메서드도 캡슐화합니다🎜Number | Method | Description | 1 | isEmpty | 비어 있나요 | 2 | toArray | 배열로 변환 | 3 | all | all 데이터 | 4 | merge | 다른 데이터 병합 | 5 | diff | 배열을 비교하고 차이를 반환 | 6 | flip | 데이터의 키와 값 교환 | 7 | intersect | 배열을 비교하고 교차점 반환 | 8 | keys | 데이터의 모든 키 이름 반환 | 9 | pop | 데이터의 마지막 요소 삭제 | 10 | shift | 데이터의 첫 번째 요소 삭제 | 11 | unshift | 데이터 시작 부분에 요소 삽입 | 12 | push | 끝 부분에 요소 삽입 | 13 | reduce | 사용자 맞춤 기능을 이용하여 반품 문자열 배열 | 14 | reverse | 데이터가 역순으로 재배열됨 | 15 | chunk | 데이터가 여러 데이터 블록으로 분리됨 | 16 | 각 | 콜백 실행 데이터의 각 요소에 대해 | 17 | filter | 콜백 함수를 사용하여 데이터의 요소를 필터링합니다 | 18 | column | 데이터의 지정된 열을 반환 | 19 | 정렬 | 데이터 정렬 | 20 | order | 필드 정렬 지정 | 21 | shuffle | 데이터 섞기 | 22 | 슬라이스 | 데이터 일부 가로채기 | 23 | map | 콜백 기능 사용 | 에서 배열 요소를 처리하려면 24 | where | 필드 조건에 따라 배열의 요소를 필터링합니다 | 25 | whereLike | Like 쿼리 필터 요소 | 26 | whereNotLike | Not Like 필터 요소 | 27 | whereIn | IN 배열의 요소를 쿼리하고 필터링합니다. | 28 | whereNotIn | Not IN 배열의 요소를 쿼리하고 필터링합니다. | 29 | whereBetween | Between은 배열의 요소를 쿼리하고 필터링합니다. array | 30 | whereNotBetween | Not Between 쿼리는 배열의 요소를 필터링합니다 | rrreeePreparation: 모델에서 데이터 세트 쿼리를 수행하면 모든 데이터 세트 객체가 반환되지만 사용된 메서드는 thinkmodelCollection类 (thinkCollection에서 상속됨)이지만 사용법은 일관됩니다.
|