オブジェクト リレーショナル マッピング (ORM) は、最新のソフトウェア開発において不可欠な設計パターンです。 ORM パターンの中心的な考え方は、プログラム内のオブジェクトをリレーショナル データベース内のテーブルにマップし、それによってプログラムとデータベース間のシームレスな統合を実現することです。 ORM パターンの実装では、Hibernate、Django ORM、Ruby on Rails の Active Record などの既存の ORM フレームワークを利用できます。ただし、PHP では、追加のフレームワークを必要とせずに、ネイティブ PHP コードを使用してオブジェクト永続層を実装できます。この記事では、ネイティブ PHP コードを使用してオブジェクト永続化レイヤーを実装する方法を紹介します。
1. リレーショナル データベースの基本
PHP を使用してオブジェクト永続層を実装する方法を理解する前に、まずリレーショナル データベースのいくつかの基本概念を理解する必要があります。
1. データベース テーブル
リレーショナル データベースは多くのデータ テーブルで構成されます。各データテーブルは 1 つ以上の列で構成されます。各列には、整数、文字列、日付などの対応するデータ型があります。
2. 主キー
各データ テーブルには主キーが必要です。主キーは、テーブル内の各レコードを一意に識別するフィールドです。主キーは一意である必要があり、NULL にすることはできません。
3. 外部キー
外部キーは、2 つ以上のテーブル間の関係を確立するために使用されます。外部キーは、あるテーブルと別のテーブルの間の関連付けを定義し、2 つのテーブルから情報を取得し、結合クエリを通じてそれらをマージできるようにします。
2. PDO を使用してデータベースにアクセスする
PDO (PHP データ オブジェクト) は、PHP でデータベースにアクセスする標準的な方法です。PDO を使用して、さまざまなリレーショナル データベース (MySQL など) にアクセスできます。 、PostgreSQL など)。 PDO を使用してデータベースを操作すると、プログラムの移植性が向上し、プログラムのセキュリティが向上します。
PHP では、PDO クラスを使用してデータベース接続を初期化できます。このうち、ユーザーが指定する必要があるパラメーターには、データベースの種類、ホスト名、データベース名、ユーザー名とパスワードなどが含まれます。初期化後、PDO インスタンスを使用して SQL クエリを実行し、クエリ結果を処理できます。
以下は、PDO を使用して MySQL データベースにアクセスする例です。
<?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); foreach($dbh->query('SELECT * from FOO') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
上記のコードを実行すると、MySQL 内の FOO テーブルが選択され、クエリ結果が出力されます。
3. PHP を使用して ORM モードを実装する
ORM モードを実装する場合、PHP オブジェクトとクラスを使用してデータベース内のテーブルと列を記述する必要があります。各テーブルに対応するクラスを定義し、テーブル内の列をクラスの属性に変換する必要があります。 ORM モードを実装するには、データベースを操作し、クエリ結果を PHP クラス オブジェクトに変換するためのデータベース アクセス層を導入する必要もあります。 PHP を使用して ORM モードを実装するための開発手順は次のとおりです:
1. データベース接続 MySQL を作成する
PHP では、PDO を使用して MySQL データベースに接続できます。以下は、MySQL データベース接続を開くためのコード例です。
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
上記のコードでは、MySQL データベースへの接続を作成し、PDO のエラー モードを例外モードに設定します。 PDO を使用する場合、例外モードを使用すると、プログラム内で発生する可能性のあるエラーをより簡単に処理できます。
2. ORM クラスの定義
ORM モードを実装するには、テーブルに対応する ORM クラスを定義し、テーブル内の列をクラスの属性に変換する必要があります。次に、ORM クラスのサンプル コードを示します。
<?php class User { private $id; private $name; private $email; private $password; public function __construct($id, $name, $email, $password) { $this->id = $id; $this->name = $name; $this->email = $email; $this->password = $password; } public function getId() { return $this->id; } public function setId($id) { $this->id = $id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } public function getPassword() { return $this->password; } public function setPassword($password) { $this->password = $password; } } ?>
上記のコードでは、User クラスを作成し、テーブル内の ID、名前、電子メール、およびパスワードの列をクラスの属性に変換します。また、クラスのコンストラクターと一連のゲッター メソッドとセッター メソッドも定義します。
3. ORM データ アクセス層の実装
ORM モードを実装するには、データベースを操作するためのデータ アクセス層も実装する必要があります。以下は、単純なデータ アクセス層のサンプル コードです。
<?php class UserDAO { private $pdo; public function __construct(PDO $pdo) { $this->pdo = $pdo; } public function getUserById($id) { $stmt = $this->pdo->prepare('SELECT * FROM user WHERE id = :id'); $stmt->execute(array('id' => $id)); $data = $stmt->fetch(); if ($data) { return new User($data['id'], $data['name'], $data['email'], $data['password']); }else{ return null; } } public function saveUser(User $user) { if ($user->getId()) { // update $stmt = $this->pdo->prepare('UPDATE user SET name = :name, email = :email, password = :password WHERE id = :id'); $stmt->execute(array('name' => $user->getName(), 'email' => $user->getEmail(), 'password' => $user->getPassword(), 'id' => $user->getId())); } else { // insert $stmt = $this->pdo->prepare('INSERT INTO user (name, email, password) VALUES (:name, :email, :password)'); $stmt->execute(array('name' => $user->getName(), 'email' => $user->getEmail(), 'password' => $user->getPassword())); $user->setId($this->pdo->lastInsertId()); } } public function deleteUser(User $user) { $stmt = $this->pdo->prepare('DELETE FROM user WHERE id = :id'); $stmt->execute(array('id' => $user->getId())); } } ?>
上記のコードでは、データベースを操作して User オブジェクトを返すために使用される UserDAO クラスを作成しました。このクラスの getUserById メソッドは指定された ID を持つユーザー情報をデータベースから取得し、saveUser メソッドはユーザー情報をデータベースに更新または挿入し、deleteUser メソッドはユーザー情報を削除します。
4. ORM クラスの使用
ORM モードを実装した後は、SQL クエリを手動で記述することなく、ORM オブジェクトを通常のオブジェクトと同様に使用できます。以下は、ORM クラスのサンプル コードです。
<?php // create a new user $user = new User(null, 'John Doe', 'john@example.com', 'password'); $userDAO = new UserDAO($pdo); $userDAO->saveUser($user); // find a user by id $user = $userDAO->getUserById(1); // update a user's name $user->setName('Jane Doe'); $userDAO->saveUser($user); // delete a user $userDAO->deleteUser($user); ?>
上記のコードでは、新しいユーザーを作成し、そのユーザーをデータベースに挿入します。次に、getUserById メソッドを使用して、ID 1 のユーザー情報を検索します。 setter メソッドを使用してユーザー名を更新し、saveUser メソッドを使用して変更をデータベースに保存できます。最後に、deleteUser メソッドを使用してユーザーを削除します。
結論
この記事では、PHP を使用してオブジェクト永続化レイヤー パターンを実装する方法を紹介しました。まず、リレーショナル データベースの基本を学び、次に PHP がデータベースに接続するために PDO を使用する方法を詳しく調べました。リレーショナル データベースと PDO の接続方法を理解することで、ORM モードを自分で手動で実装できます。 ORM クラスとデータ アクセス レイヤーを定義することで、データベース操作を PHP コードにシームレスに統合できます。 ORM モードを使用すると、コードが大幅に簡素化され、データベース操作がより便利になります。
以上がPHPでオブジェクト永続層を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。