ThinkPHP 데이터베이스 운영 데이터 쿼리

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());
        
    }
}

추천

출처blog.csdn.net/qq_43058685/article/details/112516204