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