1. 단일 데이터 쿼리
1.1 단일 데이터 쿼리
- Db : table ()의 테이블 매개 변수는 완전한 테이블 이름 (접두사 포함)이어야합니다.
- 쿼리 조건을 지정해야합니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
// 单数据查询(查询一条数据)查询一条数据
// 使用find函数进行查找,必须指定where查询条件
// where需要两个参数 field 是表中的字段 op 是对应的值
$user = Db::table('tp_user')->where('id',27)->find();
return json($user);
}
}
1.2 생성 된 SQL 문 출력
쿼리의 SQL 문 가져 오기
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$user = Db::table('tp_user')->where('id',27)->find();
// 返回最后一次生成的SQL语句
$sql = Db::getLastSql();
return json($user);
}
}
1.3 null 값을 반환하거나 예외 발생
쿼리 결과가 없으면 null 값을 반환하거나 예외를 throw합니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
// 当查询不到结果时,返回null
$user1 = Db::table('tp_user')->where('id',1)->findOrEmpty();
// 当查询不到结果是,则抛出一个异常
$user2 = Db::table('tp_user')->where('id',1)->findOrFail();
return json($user);
}
}
둘째, 데이터 세트 쿼리
2.1 데이터 세트 쿼리
여러 데이터 열을 가져옵니다.
쿼리 조건을 지정할 필요는 없습니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
// 可以不指定where条件
$user = Db::table('tp_user')->select();
return json($user);
}
}
2.2 데이터가 없으면 예외가 발생합니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$user = Db::table('tp_user')->where('id',1111)->selectOrFail();
return json($user);
}
}
2.3 데이터 세트 객체를 배열로 변환
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$user = Db::table('tp_user')->select()->toArray();
dump($user);
}
}
2.4 이름 방법 사용, 접두사 생략
테이블 이름 접두사가 데이터베이스 구성에 구성된 경우 접두사를 생략 할 수 있습니다. 이름 방법을 사용하는 경우 접두사가 추가되고 접두사 정보도 구성됩니다. 그러면 오류가있을 수 있습니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$user = Db::name('user')->select()->toArray();
dump($user);
}
}
3. 기타 쿼리
3.1 값 방법은 필드의 값을 가져옵니다
Value 메서드를 사용하여 필드의 값 (단일 데이터)을 가져옵니다.
값의 매개 변수는 필드 이름입니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$username = Db::name('user')->where('id',27)->value('username');
dump($username);
}
}
3.2 열 메서드는 지정된 열의 여러 값을 쿼리합니다.
열 매개 변수는 지정된 열의 이름입니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$res = Db::name('user')->column('username');
return json($res);
}
}
ID를 색인으로 지정
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$res = Db::name('user')->column('username','id');
return json($res);
}
}
3.3 청크 방법을 사용하여 데이터 일괄 처리
한 번에 너무 많은 데이터를 읽고 메모리를 차지하지 않으려면 chunk 메서드를 사용하여 데이터를 일괄 처리 할 수 있습니다.
- 청크 메소드의 첫 번째 매개 변수는 매번 처리되는 데이터의 양이고 두 번째 매개 변수는 클로저 함수로 전달됩니다. 함수의 매개 변수는 결과 데이터 세트입니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
Db::name('user')->chunk(4,function ($users){
foreach ($users as $user) {
dump($user);
}
echo 'hello world';
});
}
}
3.4 커서를 사용하여 쿼리
커서 쿼리 기능을 사용하면 한 번에 한 행만 읽을 수 있습니다. 다시 읽을 때 자동으로 다음 줄로 이동할 수 있습니다. 메모리 오버 헤드를 크게 줄일 수 있습니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$cursor = Db::table('tp_user')->cursor();
foreach($cursor as $user)
{
dump($user);
}
}
}
넷, 체인 쿼리
4.1 쿼리 규칙
->
연속 쿼리 인 쿼리 메서드를 연속해서 여러 번 호출 할 수 있습니다 .- Db :: name ( 'user')시 쿼리 객체 (Query)가 반환되고 해당 데이터베이스의 메서드를 연결할 수 있습니다.
- 데이터베이스 쿼리 메서드가 실행될 때마다 쿼리 개체 (Query)가 반환됩니다. 예를 들어 where ().
- 데이터베이스 쿼리 개체 인 한 언제든지 체인 쿼리를 사용할 수 있습니다.
- 마지막으로 find () 및 select () 메서드를 사용하여 배열 또는 데이터 세트 객체를 반환합니다.
- 체인 작업을 사용할 수있는 쿼리 메서드 외에도 CRUD 작업도 사용할 수 있습니다.
4.2 반복 쿼리
데이터베이스 쿼리가 사용될 때마다 인스턴스가 생성되어 리소스 낭비가 발생합니다. 개체 인스턴스를 저장할 수 있습니다. 그런 다음 다시 전화하십시오.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$userQuery = Db::name('user');
$resFind = $userQuery->where('id',27)->find();
$resSelect = $userQuery->select();
}
}
하지만 동일한 객체 인스턴스를 두 번째 쿼리하면 마지막 값이 유지됩니다. removeOption () 메서드를 사용하여 마지막 쿼리의 유지 된 값을 정리할 수 있습니다.
use think\facade\Db;
class DataBaseTest
{
public function index()
{
$userQuery = Db::name('user');
$resFind = $userQuery->where('id',27)->find();
$resSelect = $userQuery->select();
echo Db::getLastSql();
echo '<br>';
return json($userQuery->removeOption('where')->select());
}
}