退屈なSQLクエリに別れを告げます! FluentPDO
を使用してデータベース操作を簡素化しますSQLクエリも書くのにうんざりしていませんか?特に時間が厳しいとき。あなたが私のようであれば、今日は非常にクールなツール、Fluentpdoを学びます。 「PDO」という用語に慣れていない場合は、心配しないでください。これは非常に単純な概念です。PHPの世界では、PDOは永続的なデータオブジェクトの略であり、基本的なデータベース操作(挿入、更新、削除など)を抽象化するのに役立ちます。これは、あなたとデータベースの間の抽象化の層です。
結果は何ですか? SQLクエリを書く必要はもうありません!これは、これまでに見た最初のプロジェクトではないかもしれません。市場には多くの同様のプロジェクトがあり、それぞれに重要な機能があります。 FluentPDOの重要な機能は、強力なJoinクエリビルダーです。
多くのユーザーが存在し、各ユーザーには独自のお気に入りの製品があります。各ユーザーについて、名、姓、登録日を保存します。各アイテムについて、その名前、ブランド、価格、および関連するユーザーIDを保存します。
単純なMySQLデータベースを使用します。データ構造は次のとおりです
以下はSQLダンプ(いくつかのダミーデータを含む)です:
注:簡単に想像できるように、これは「完全な」プロジェクトではありません。 FluentPDOを試しているだけなので、ログイン、登録、アプリケーション構造などをカバーしません。
CREATE TABLE IF NOT EXISTS items ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL, brand varchar(100) NOT NULL, price decimal(10,2) NOT NULL, user_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; INSERT INTO items (id, name, brand, price, user_id) VALUES (1, 'Last Awesome Phone', 'Awesome Brand', '550.00', 1), (2, 'Last Awesome TV', 'Awesome Brand', '1200.00', 1), (3, 'Fantastic E-Car', 'E-Cars Inc.', '80000.00', 2), (4, 'Fantastic E-Bike', 'E-Bikes Co. Ltd.', '16000.00', 2); CREATE TABLE IF NOT EXISTS users ( id int(10) unsigned NOT NULL AUTO_INCREMENT, first_name varchar(100) NOT NULL, last_name varchar(100) NOT NULL, signup_date datetime NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; INSERT INTO users (id, first_name, last_name, signup_date) VALUES (1, 'Francesco', 'Malatesta', '2014-06-29 13:00:00'), (2, 'John', 'Foo Bar', '2014-06-20 11:16:39'); ALTER TABLE items ADD CONSTRAINT items_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id);
インストール
あなたが完了したら、このようにインスタンス化する必要があります:
"require": { ... "lichtner/fluentpdo": "dev-master" }
CREATE TABLE IF NOT EXISTS items ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL, brand varchar(100) NOT NULL, price decimal(10,2) NOT NULL, user_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; INSERT INTO items (id, name, brand, price, user_id) VALUES (1, 'Last Awesome Phone', 'Awesome Brand', '550.00', 1), (2, 'Last Awesome TV', 'Awesome Brand', '1200.00', 1), (3, 'Fantastic E-Car', 'E-Cars Inc.', '80000.00', 2), (4, 'Fantastic E-Bike', 'E-Bikes Co. Ltd.', '16000.00', 2); CREATE TABLE IF NOT EXISTS users ( id int(10) unsigned NOT NULL AUTO_INCREMENT, first_name varchar(100) NOT NULL, last_name varchar(100) NOT NULL, signup_date datetime NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; INSERT INTO users (id, first_name, last_name, signup_date) VALUES (1, 'Francesco', 'Malatesta', '2014-06-29 13:00:00'), (2, 'John', 'Foo Bar', '2014-06-20 11:16:39'); ALTER TABLE items ADD CONSTRAINT items_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id);
PDOコンストラクター法で接続の詳細を指定する必要があります。最初のパラメーターでは、DBNAME =セクションの後にデータベース名を入力し、ユーザー名とパスワードをそれぞれ2番目と3番目のパラメーターとして記述します。
次に、PDOオブジェクトをパラメーターとしてFluentPDOオブジェクトのコンストラクターに渡します。
それだけです、Fluentpdoは他に何も機能する必要はありません。追加の構成は必要ありません。
すでにいくつかの仮想データがあります。 SQLクエリの「Hello World」から始めましょう。基本情報を取得するためのパラメーターとして、Where句とユーザープライマリキーIDを備えた簡単な選択。
"require": { ... "lichtner/fluentpdo": "dev-master" }
ここで理解するのは難しいことはありません。 FluentPDOには優れた読みやすい構文があるため、私たちが何をしているのかを簡単に理解するのは簡単です。
from()メソッドは、正しいテーブルを設定するために使用されます。 where()メソッドは、同じ名前句で結果をフィルタリングするために使用されます。デフォルトでは、where()メソッドでフィールド名と値を指定するだけです。 "="は暗黙的です。もちろん、異なる比較演算子を使用することもできます。この場合、フィールド名の後にそれらを書く必要があります。
$pdo = new PDO("mysql:dbname=wishlist", "root", "password"); $fpdo = new FluentPDO($pdo);
結果を取得するのは非常に簡単です。それらは、使用したばかりの$ queryオブジェクトに保存されます。例に示すように、foreachループを使用してそれを反復させることができます。
この特定のケース(プライマリキーIDでアイテムを検索)では、from()メソッドでショートカットを使用することもできます。これよりも複雑なものを見てみましょう。
$user_id = 1; $query = $fpdo->from('users')->where('id', $user_id); foreach($query as $row){ echo 'Hello, ' . $row['first_name'] . ' ' . $row['last_name'] . '!'; }
特定のフィールドを選択
必要に応じて、()from()からselectにselect()メソッドを使用できます。 Arrayを使用して、FluentPDOに選択するフィールドに伝える必要があります。
制限とオフセット
$fpdo->from('items')->where('price >', 1000);
これら2つの方法に対する唯一の引数は、必要な値を指定する整数です(limit()、それはアイテムの数です; offset()の場合、それはスキップするアイテムの数です)。
$query = fpdo->from('users', $user_id); // 将与...相同 $query = $fpdo->from('users')->where('id', $user_id);
を注文します
メソッドは、「持っている」、「グループ」、「注文」の指示にも提供されています。
による注文
Orderby()メソッドは、特定の条件に応じて結果をソートするために使用されます。例を挙げてみましょう:価格で結果を(安価から高価まで)並べ替える方法は次のとおりです。注文を逆にする場合(最も高価なものから最も安いものから最も安いものを取得します)、選択した列の後に「DESC」を追加するだけです。
$query = $fpdo->from('users')->select(array('first_name', 'last_name'))->where('id', $user_id);
// 选择前十个结果... $query = $fpdo->from('users')->where('id', $user_id)->limit(10)->offset(0);
非常にシンプルです。
$query = $fpdo->from('items')->orderBy('price');
グループ
GroupBy()メソッドを使用して、特定のフィールドを使用して結果を条件としてグループ化できます。ここでは、各ブランドの製品の量を表示します。
CREATE TABLE IF NOT EXISTS items ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL, brand varchar(100) NOT NULL, price decimal(10,2) NOT NULL, user_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; INSERT INTO items (id, name, brand, price, user_id) VALUES (1, 'Last Awesome Phone', 'Awesome Brand', '550.00', 1), (2, 'Last Awesome TV', 'Awesome Brand', '1200.00', 1), (3, 'Fantastic E-Car', 'E-Cars Inc.', '80000.00', 2), (4, 'Fantastic E-Bike', 'E-Bikes Co. Ltd.', '16000.00', 2); CREATE TABLE IF NOT EXISTS users ( id int(10) unsigned NOT NULL AUTO_INCREMENT, first_name varchar(100) NOT NULL, last_name varchar(100) NOT NULL, signup_date datetime NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; INSERT INTO users (id, first_name, last_name, signup_date) VALUES (1, 'Francesco', 'Malatesta', '2014-06-29 13:00:00'), (2, 'John', 'Foo Bar', '2014-06-20 11:16:39'); ALTER TABLE items ADD CONSTRAINT items_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id);
注:クラシックSQLのようなフィールドのエイリアスを指定できます。
その名前をパラメーターとして指定することで、単一の列を取得することもできます。
"require": { ... "lichtner/fluentpdo": "dev-master" }
fetchpairs
$pdo = new PDO("mysql:dbname=wishlist", "root", "password"); $fpdo = new FluentPDO($pdo);
次の出力が得られます:
$user_id = 1; $query = $fpdo->from('users')->where('id', $user_id); foreach($query as $row){ echo 'Hello, ' . $row['first_name'] . ' ' . $row['last_name'] . '!'; }
これは、ユーザーユニークIDと名前を使用した例です。
$fpdo->from('items')->where('price >', 1000);
fetchall
$query = fpdo->from('users', $user_id); // 将与...相同 $query = $fpdo->from('users')->where('id', $user_id);
次のものは構文です:
fetchall()を使用すると、結果から得られるものを完全に制御できます。最初のパラメーター$インデックスはインデックスとして使用されるフィールドであり、$ selectonlyは選択するフィールドを指定するために使用されます。
$query = $fpdo->from('users')->select(array('first_name', 'last_name'))->where('id', $user_id);
これは例です:
注:インデックスとして使用される列(この場合はID)も最終配列に含まれています。
// 选择前十个结果... $query = $fpdo->from('users')->where('id', $user_id)->limit(10)->offset(0);
わかりました、選択操作については十分です。他のCRUD操作を見てみましょう。
挿入、更新、削除
挿入操作から始めましょう。
挿入
$query = $fpdo->from('items')->orderBy('price');
最後のステップは、新しいレコードの主要なキーを返すexecute()メソッドです。
必要に応じてこのショートカットを使用することもできます:
update
$query = $fpdo->from('items')->orderBy('price DESC');
set()メソッドを使用して、更新操作の新しい値を指定できます。
$query = $fpdo->from('items')->having('price <', 2000);
where()メソッドを使用して、影響を受ける行をフィルタリングします。前述のように、ショートカットもあります。
削除
主要なキーを知っているレコードを削除する場合は、上記のdeletefrom()ショートカットを使用できます。
$query = $fpdo->from('items')->select('brand, COUNT(*) AS c')->groupBy('brand');
注:ここの例からわかるように、execute()メソッドを使用して削除クエリを実行する必要があります。これを行わないと、データベースに何も変更されません。同じことが挿入と更新にも当てはまります。これに留意してください。
高度な機能
クエリビルダーに参加
FluentPDOを使用して書かれた「クラシック」結合クエリから始めます。
これに似ています:
OK:Special ReftJoin()メソッドでクラシック構文を使用します。悪くない。
しかし、私たちはもっとうまくやることができます。テーブル構造でコンベンションを使用する場合は、このコードを使用できます。
CREATE TABLE IF NOT EXISTS items ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL, brand varchar(100) NOT NULL, price decimal(10,2) NOT NULL, user_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY user_id (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; INSERT INTO items (id, name, brand, price, user_id) VALUES (1, 'Last Awesome Phone', 'Awesome Brand', '550.00', 1), (2, 'Last Awesome TV', 'Awesome Brand', '1200.00', 1), (3, 'Fantastic E-Car', 'E-Cars Inc.', '80000.00', 2), (4, 'Fantastic E-Bike', 'E-Bikes Co. Ltd.', '16000.00', 2); CREATE TABLE IF NOT EXISTS users ( id int(10) unsigned NOT NULL AUTO_INCREMENT, first_name varchar(100) NOT NULL, last_name varchar(100) NOT NULL, signup_date datetime NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; INSERT INTO users (id, first_name, last_name, signup_date) VALUES (1, 'Francesco', 'Malatesta', '2014-06-29 13:00:00'), (2, 'John', 'Foo Bar', '2014-06-20 11:16:39'); ALTER TABLE items ADD CONSTRAINT items_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id);
ここを見てください:
"require": { ... "lichtner/fluentpdo": "dev-master" }
最後の例の最終ビルドクエリをここで読むことができます:
結論 FluentPDOは小さくてシンプルなプロジェクトです。それは間違いなくすべてのプロジェクトに適合するわけではなく、特に6か月間休眠している場合は改善することができますが、小/中サイズのアプリケーションでは、ゲームに大きなフレームワークを導入したくない場合に適したオプションになる可能性があります。 。 Join Query Builderなど、その機能の一部があるため、良いトレードオフです。
。このコマンドを実行した後、ComposerはFluentPDOとその依存関係をプロジェクトにダウンロードしてインストールします。
メソッドを使用してテーブルを指定し、
メソッドを使用して新しい値を指定し、
FluentPDOでトランザクションを使用する方法は? メソッドを使用できます。例は次のとおりです。 以上がFluentPDOを始めましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。$pdo = new PDO("mysql:dbname=wishlist", "root", "password");
$fpdo = new FluentPDO($pdo);
$user_id = 1;
$query = $fpdo->from('users')->where('id', $user_id);
foreach($query as $row){
echo 'Hello, ' . $row['first_name'] . ' ' . $row['last_name'] . '!';
}
単純な閉鎖システムを使用します。デバッグを使用する場合は、コードを接続した後、このコードを配置するだけです。
$fpdo->from('items')->where('price >', 1000);
を始めることについてのFAQ
FluentPDOとは何ですか?なぜそれを使用する必要があるのですか?
fluentpdoをインストールする方法は?
FluentPDOは、Composer(PHPのDependency Manager)を使用してインストールできます。コマンドを実行してインストールできますFluentPDOを使用してデータベースに接続する方法は?
FluentPDOを使用してデータベースに接続するには、FluentPDOクラスの新しいインスタンスを作成する必要があります。これを実行できます。PDOインスタンスをFluentPDOコンストラクターに渡すことができます。例は次のとおりです。composer require envms/fluentpdo
FluentPDOは、選択したクエリを実行するための簡単なインターフェイスを提供します。 $query = fpdo->from('users', $user_id);
// 将与...相同
$query = $fpdo->from('users')->where('id', $user_id);
FluentPDOを使用して挿入クエリを実行する方法は? from
挿入クエリを実行するには、select
メソッドを使用してテーブルを指定し、$query = $fpdo->from('users')->select(array('first_name', 'last_name'))->where('id', $user_id);
CREATE TABLE IF NOT EXISTS items (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(100) NOT NULL,
brand varchar(100) NOT NULL,
price decimal(10,2) NOT NULL,
user_id int(10) unsigned NOT NULL,
PRIMARY KEY (id),
KEY user_id (user_id) ) ENGINE=InnoDB
DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
INSERT INTO items (id, name, brand, price, user_id)
VALUES
(1, 'Last Awesome Phone', 'Awesome Brand', '550.00', 1),
(2, 'Last Awesome TV', 'Awesome Brand', '1200.00', 1),
(3, 'Fantastic E-Car', 'E-Cars Inc.', '80000.00', 2),
(4, 'Fantastic E-Bike', 'E-Bikes Co. Ltd.', '16000.00', 2);
CREATE TABLE IF NOT EXISTS users (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
first_name varchar(100) NOT NULL,
last_name varchar(100) NOT NULL,
signup_date datetime NOT NULL,
PRIMARY KEY (id) ) ENGINE=InnoDB
DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
INSERT INTO users (id, first_name, last_name, signup_date)
VALUES
(1, 'Francesco', 'Malatesta', '2014-06-29 13:00:00'),
(2, 'John', 'Foo Bar', '2014-06-20 11:16:39');
ALTER TABLE items ADD CONSTRAINT items_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id);
FluentPDOを使用して更新クエリを実行する方法は?
update
set
where
FluentPDOを使用して削除クエリを実行する方法は? "require": {
...
"lichtner/fluentpdo": "dev-master"
}
メソッドを使用してテーブルを指定し、
メソッドを使用して条件を指定できます。例は次のとおりです。deleteFrom
where
fluentpdoのエラーを処理する方法は? $pdo = new PDO("mysql:dbname=wishlist", "root", "password");
$fpdo = new FluentPDO($pdo);
$user_id = 1;
$query = $fpdo->from('users')->where('id', $user_id);
foreach($query as $row){
echo 'Hello, ' . $row['first_name'] . ' ' . $row['last_name'] . '!';
}
、
、およびbeginTransaction
commit
rollBack
FluentPDOを使用してテーブルに参加する方法は? $fpdo->from('items')->where('price >', 1000);
メソッドを使用して、テーブルと条件を指定できます。例は次のとおりです。