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値を返すか、例外をスローします

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 nameメソッドを使用し、プレフィックスを省略します

テーブル名のプレフィックスがデータベース構成で構成されている場合は、プレフィックスを省略できます。nameメソッドを使用する場合は、プレフィックスが追加され、プレフィックス情報も構成されます。その後、エラーが発生する可能性があります

use think\facade\Db;

class DataBaseTest
{
    
    
    public function index()
    {
    
    

       $user = Db::name('user')->select()->toArray();
       dump($user);
    }
}

3.その他のクエリ

3.1 valueメソッドは、フィールドの値を取得します

Valueメソッドを使用して、フィールド(単一データ)の値を取得します。

valueのパラメータはフィールド名です。

use think\facade\Db;

class DataBaseTest
{
    
    
    public function index()
    {
    
    
        $username = Db::name('user')->where('id',27)->value('username');
        dump($username);
    }
}

3.2 columnメソッドは、指定された列の複数の値を照会します。

列パラメーターは、指定された列の名前です

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チャンク方式を使用してデータをバッチ処理する

一度に大量のデータを読み取ってメモリを占有することを回避するために、チャンク方式を使用してデータをバッチで処理できます。

  • チャンクメソッドの最初のパラメーターは、毎回処理されるデータの量であり、2番目のパラメーターはクロージャー関数で渡されます。関数のパラメーターは結果データセットです。
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カーソルを使用してクエリを実行します

カーソルクエリ機能を使用すると、一度に1行しか読み取ることができません。もう一度読むと、自動的に次の行に移動できます。メモリのオーバーヘッドを大幅に節約できます。

use think\facade\Db;

class DataBaseTest
{
    
    
    public function index()
    {
    
    
		$cursor = Db::table('tp_user')->cursor(); 
        foreach($cursor as $user)
        {
    
     
            dump($user); 
        }
    }
}

4、チェーンクエリ

4.1クエリルール

  • ->連鎖クエリであるqueryメソッドを連続して複数回呼び出すことができます。
  • 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();
    }
}

ただし、同じオブジェクトインスタンスが2回クエリされると、最後の値が保持されます。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