PHP データベース操作: ORM の使用

WBOY
リリース: 2016-06-23 13:11:41
オリジナル
1301 人が閲覧しました

以前、ブログ投稿「PHP データベース操作: MySQL ネイティブ API から PDO へ」を投稿し、PHP が MySQL ネイティブ API、MySQLi プロセス指向、MySQLi オブジェクト指向、および PDO を使用して MySQL データベースを操作する方法を示しました。この記事では、ORMを使ってデータベースを操作する方法を紹介します。

ORMとは何ですか?ネットユーザーの引用:

ORM オブジェクト リレーショナル マッピング、O (オブジェクト) オブジェクトは、プロジェクト内のエンティティであり、より正確にはデータ モデルであり、永続クラスとも言えます。 R (Relation) リレーショナル データ、M (Mapping) マッピング。オブジェクトをリレーショナル データにマッピングし、リレーショナル データをオブジェクトにマッピングするプロセス。より直観的に理解すると、ORM は OOP 思考を使用して SQL ステートメントの追加、削除、変更、クエリを生成するということです。

PDO と比較して、ORM は SQL ステートメントを書かずに迅速な開発プロジェクトに適しています。ここでは、便利な ORM をいくつか紹介します。

Medoo

以下では例としてバージョン 1.0.2 を使用します。

環境要件

PHP 5.1以降、PHP 5.4以降を推奨し、PDOをサポートしています。
MySQL、MSSQL、SQLiteの少なくとも1つがインストールされている

インストール方法

MedooはComposerのインストールと直接ダウンロードをサポートしています。

Composer を使用してインストール:

composer require catfan/Medoocomposer update
ログイン後にコピー

直接ダウンロード:

https://github.com/catfan/Medoo/archive/master.zip

始めましょう

Medoo を導入してデータベースを構成します:

<?php//使用Composer安装的这样引入//require 'vendor/autoload.php';// 直接下载的这样引入require_once 'medoo.php'; // 初始化$db = new medoo([    'database_type' => 'mysql',    'database_name' => 'test',    'server' => 'localhost',    'username' => 'root',    'password' => '123456',    'charset' => 'utf8',        //可选:端口    'port' => 3306,     //可选:表前缀    'prefix' => '',     // PDO驱动选项 http://www.php.net/manual/en/pdo.setattribute.php    'option' => [        PDO::ATTR_CASE => PDO::CASE_NATURAL    ]]); 
ログイン後にコピー

SQLite の場合:

$database = new medoo([    'database_type' => 'sqlite',    'database_file' => 'my/database/path/database.db']);
ログイン後にコピー

CURD

クエリ (読み取り):

select($table, $columns, $where) //获取所有记录- table [string] 表名- columns [string/array] 字段- where (可选) [array] 查询条件get($table, $columns, $where) //仅获取一条数据select($table, $join, $columns, $where)- table [string] 表名- join [array] 关联查询,如果没有可以忽略- columns [string/array] 字段- where (可选) [array] 查询条件
ログイン後にコピー

例:

$user = $db->select('user', '*'); //返回所有数据$user = $db->get('user', '*'); //返回所有数据$user = $db->select('user','*', array('name ' => 'joy'));$user = $db->select('user','name', array('age[>] ' => 20)); $user = $db->select('user',['name','age'], array('age[<=] ' => 20)); 
ログイン後にコピー

新規 (作成):

insert($table, $data)
ログイン後にコピー

例:

$db->insert('user', array('name'=> 't3', 'age'=>22)); //返回自增id
ログイン後にコピー

注: データにサブ配列が含まれる場合s、それらはシリアル化されます( ) シリアル化するには、json_encode() を使用して JSON として保存できます。集計クエリ

update($table, $data, $where)
ログイン後にコピー

上記のメソッドはすべて、関連クエリである 2 番目のパラメータ $join をサポートしています。

トランザクションメカニズム

$db->update('user', array('name'=> 't5'), array('id'=> 23)); //返回受影响的行数
ログイン後にコピー

クエリを使用する

SQLを直接使用することができます。

delete($table, $where)
ログイン後にコピー
PDO を直接使用する

Medoo は PDO に基づいているため、PDO インスタンスを直接呼び出すことができます。

PDO インスタンスを取得します:

$db->update('user',  array('id'=> 23)); //返回受影响的行数
ログイン後にコピー

次に、PDO オブジェクトのすべてのメソッドを使用できるようになります。

$db->has('user',  array('id'=> 23)); //记录是否存在$db->count('user',  array('id[>]'=> 23)); //统计$db->max('user', 'age', array('gender'=> 1)); //最大值$db->min('user', 'age', array('gender'=> 2)); //最小值$db->avg('user',  'age', array('gender'=> 2)); //平均值$db->sum('user',  'age', array('gender'=> 2)); //求和
ログイン後にコピー

例:

$db->action(function($db) {    try{        $db->insert("account", [            "name" => "foo",            "email" => "bar@abc.com"        ]);             $db->delete("account", [            "user_id" => 2312        ]);    }catch(Exception $e){        // 返回false就会回滚事务        return false;    }});
ログイン後にコピー

pdo トランザクション:

//查询$data = $db->query("SELECT * FROM user")->fetchAll();print_r($data);//删除$db->query("DELETE FROM user where name='t5' ");
ログイン後にコピー

DEBUG

debug()

を使用して最終 SQL ステートメントを出力します

select、get、insert、update などのメソッドの前に debug() メソッドを追加しますSQL ステートメントを出力すると、プログラムは実行を継続しません:

$pdo = $db->pdo;
ログイン後にコピー

error()

最後の操作のエラー メッセージを返します

1.PDO::beginTransaction — 启动一个事务2.PDO::commit — 提交一个事务3.PDO::__construct — 创建一个表示数据库连接的 PDO 实例4.PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE5.PDO::errorInfo — 获取错误信息6.PDO::exec — 执行一条 SQL 语句,并返回受影响的行数7.PDO::getAttribute — 取回一个数据库连接的属性*8.PDO::getAvailableDrivers — 返回一个可用驱动的数组(了解即可)*9.PDO::inTransaction — 检查是否在一个事务内(了解即可)10.PDO::lastInsertId — 返回最后插入行的ID或序列值11.PDO::prepare — 创建SQL的预处理,返回PDOStatement对象12.PDO::query — 用于执行查询SQL语句,返回PDOStatement对象13.PDO::quote — 为sql字串添加单引号14.PDO::rollBack — 回滚一个事务15.PDO::setAttribute — 设置属性
ログイン後にコピー

log()

クエリの通常の実行に影響を与えずに、すべての SQL クエリ ステートメントを返します

$stmt = $pdo->query('select * from user limit 2'); //返回一个PDOStatement对象//$row = $stmt->fetch(); //从结果集中获取下一行,用于while循环$rows = $stmt->fetchAll(); //获取所有print_r($rows);
ログイン後にコピー

last_query()

log() に似ていますが、最後の SQL クエリステートメントのみを返します。これはクエリの通常の実行には影響しません

$pdo->beginTransaction();//开启事务处理try{    //PDO预处理以及执行语句...        $pdo->commit();//提交事务}catch(PDOException $e){    $pdo->rollBack();//事务回滚        //相关错误处理    throw $e;}
ログイン後にコピー
Eloquent ORM

Eloquent ORM は、Laravel フレームワークによって使用される ORM です。 Laravel の Eloquent ORM は、データベースと対話するためのより洗練された ActiveRecord 実装を提供します。 各データベース テーブルはモデル ファイルに対応します。

参考:

1. ガイドブック - Medoohttp://medoo.in/api/new/2. 雄弁なORMノート - 飛虹英〜 - Blog Park

(続く...)





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!