thinkphp5.0 学習ノート データベースの操作

巴扎黑
リリース: 2023-03-11 06:02:02
オリジナル
1952 人が閲覧しました

ThinkPHP には、さまざまなデータベース操作をカプセル化する組み込みの抽象データベース アクセス層があり、さまざまなデータベースに対してさまざまなコードや基礎となる実装を記述することなく、パブリック Db クラスを使用するだけで済みます。データベースドライバーがそれを処理します。 PDO メソッドを使用することで、現在、Mysql、SqlServer、PgSQL、Sqlite およびその他のデータベースのサポートが含まれています。

1. 基本的な使用法

データベース接続情報を設定した後、データベースを直接使用してネイティブ SQL 操作を実行し、query(查询操作)和execute (書き込み操作) メソッドをサポートし、パラメーター バインディングをサポートできます。

public function read()
{$sql = Db::query('select * from news');
    dump($sql);   
    
}
ログイン後にコピー

出力は次のとおりです:

メソッドの実行:

public function read()
{$sql = Db::execute('insert into news (nid, rid) values (11, 11)');;
    dump($sql);
}
ログイン後にコピー

出力:

データベースが正常に追加されました!

は、 名前付きプレースホルダー バインディングもサポートしています。例:

public function read()
{$sql = Db::query('select * from news where nid=:nid',['nid'=>1]);
    dump($sql);
}
ログイン後にコピー

output:

execute メソッド:

public function read()
{$sql = Db::execute('insert into news (nid, rid) values (:nid, :rid)',['nid'=>18,'rid'=>'121']);
    dump($sql);
}
ログイン後にコピー
出力:

データベースは正常に追加されました!

複数のデータベース接続を使用できます:

2. クエリコンストラクター

名前からわかるように、非常に大げさです...

まずは「基本的なクエリ」を参照してください

データをクエリします:

 // table方法必须指定完整的数据表名$sql =Db::table('news')->where('nid',1)->find();
    dump($sql);
ログイン後にコピー

find = クエリ結果が存在しない場合、null を返します

出力:

Db::table('think_user')->where('status',1)->select();
ログイン後にコピー
このクエリ文は上記と同じですが、selectメソッドのクエリ結果が存在せず、空の配列を返します
まあ、これをクエリデータセットと呼ぶそうですよ!

デフォルトでは、find メソッドと select メソッドは配列を返します。

特定のフィールドの値をクエリ

したい場合、どうすればよいでしょうか?

りー

这样看输出,我求rid的值:

 

如果你需要处理成千上百条数据库记录,可以考虑使用chunk方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用。

public function read()
{$sql =Db::table('news')->chunk(1,function($user){foreach($user as $u)
        {
dump($u);
        }
    });
    

}
ログイン後にコピー

这个样子  就可以一条一条都给遍历出来了!

是“一条一条·”,嘿!

 

3.添加数据跟删除数据

使用 Db 类的 insert 方法向数据库提交数据

public function read()
{$data = ['ntitle' => '123', 'rid' => '456'];$sql = Db::table('news')->insert($data);
    
dump($sql);
}
ログイン後にコピー

添加成功后insert 方法返回添加成功的条数,insert 正常情况返回 1

添加数据后如果需要返回新增数据的自增主键,可以使用getLastInsID方法:

public function read()
{$data = ['ntitle' => '123', 'rid' => '345'];$sql = Db::table('news')->insert($data);$userId = Db::name('news')->getLastInsID('nid');
dump($userId);
dump($sql);
}
ログイン後にコピー

看输出:

主键字段22!

 

 添加多条数据:

添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可;

public function read()
{$data = [
['ntitle' =>'gaga','rid' => '12'],['ntitle' =>'gaaaga','rid' => '123']
];$sql = Db::table('news')->insertAll($data);

dump($sql);
}
ログイン後にコピー

这样的话,返回的应该是两条2

删除数据:

根据主键来删除

public function read()
{//    根据主键 来删$sql = Db::table('news')->delete(1);//多删
//$sql = Db::table('news')->delete(1,2,3);dump($sql);
}
ログイン後にコピー

执行成功返回影响行数;

还有一种是根据条件来删除

public function read()
{//    根据条件 来删$sql = Db::table('news')->where('nid',18)->delete();//多删
//$sql = Db::table('news')->where('nid','<&#39;,1)->delete();dump($sql);
}
ログイン後にコピー

执行成功也是返回影响行数;

4.查询方法:

where方法:

可以使用where方法进行AND条件查询:

public function read()
{$sql = Db::table('news')->where('nid',20)->where('ntitle',123)->find();
dump($sql);
}
ログイン後にコピー

whereOr方法:

使用whereOr方法进行OR查询:

public function read()
{$sql = Db::table('news')->where('nid',20)->whereOr('ntitle','like','%123%')->find();
dump($sql);
}
ログイン後にコピー

混合查询:

where方法和whereOr方法在复杂的查询条件中经常需要配合一起混合使用

public function read()
{$sql = Db::table('news')->where(function($query){$query->where('nid',21)->where('nid',22);
})->whereOr(function($query)
{$query->where('ntitle','123')->whereOr('ntitle','123');
})->select();
dump($sql);
}
ログイン後にコピー

输出的是:

看一下生成的代码:

SELECT * FROM `news` WHERE  (  `nid` = 1 OR `nid` = 2 ) OR (  `ntitle` LIKE '123' OR `ntitle` LIKE '123' )
ログイン後にコピー

第一个查询方法用where或者whereOr是没有区别的。

 

查询接五

 

以上がthinkphp5.0 学習ノート データベースの操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート