ホームページ バックエンド開発 PHPチュートリアル オブジェクト リレーショナル マッピング (ORM) の基礎: Doctrine ORM を理解する

オブジェクト リレーショナル マッピング (ORM) の基礎: Doctrine ORM を理解する

Jun 19, 2023 pm 03:43 PM
orm doctrine 関係マッピング

オブジェクト リレーショナル マッピング (ORM) の基本: Doctrine ORM について

アプリケーションを開発するときは、データベースを操作してデータを保存および取得する必要があります。ただし、元のデータベースのクエリ コードを直接使用するのは不便です。オブジェクトとデータの間のマッピング関係を確立する必要があり、これが ORM の役割です。 ORM はオブジェクトとデータベース テーブルを自動的にマッピングおよび変換するため、データ操作が容易になり、コードの保守が容易になります。

Doctrine ORM は、PHP で最も人気のある ORM フレームワークの 1 つです。シンプルだが効果的な方法を使用して PHP オブジェクトとデータベース テーブルをマップし、CRUD 操作用の使いやすい API を提供します。

この記事では、設定、エンティティ(Entity)、マッピング(Mapping)、クエリ(Query)など、Doctrine ORMの基本的な知識を紹介します。

設定

始める前に、Doctrine ORM をインストールする必要があります。次のコマンドを使用して、Composer を通じてインストールできます:

composer require doctrine/orm
ログイン後にコピー

次に、PHP ファイルで Doctrine を初期化する必要があります。次のコードを渡すことができます:

use DoctrineORMToolsSetup;
use DoctrineORMEntityManager;

require_once "vendor/autoload.php";

$paths = array("path/to/entity-files");
$isDevMode = false;

// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'your_database_user',
    'password' => 'your_database_password',
    'dbname'   => 'your_database_name',
);

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);
ログイン後にコピー

上記のコードでは、最初にエンティティ ファイルへのパスを指定します。次に、ドライバー、ユーザー名、パスワード、データベース名などのデータベース接続パラメーターを指定しました。最後に、Setup::createAnnotationMetadataConfiguration() 関数を使用してメタデータを構成し、EntityManager::create() 関数を使用してエンティティ マネージャーを作成します。

エンティティ

実際、モデルとエンティティは同じものです。データベーステーブルをマップするエンティティクラスを作成する必要があります。このクラスは DoctrineORMMapingClassMetadata クラスを継承し、DoctrineORMMapingEntity および DoctrineORMMapingTable アノテーションを使用する必要があります。

use DoctrineORMMapping as ORM;

/**
 * @ORMEntity
 * @ORMTable(name="users")
 */
class User
{
    /**
     * @ORMId
     * @ORMGeneratedValue
     * @ORMColumn(type="integer")
     */
    private $id;

    /**
     * @ORMColumn(type="string")
     */
    private $name;

    /**
     * @ORMColumn(type="string", length=100, unique=true)
     */
    private $email;

    // ... getters and setters
}
ログイン後にコピー

上記のコードでは、「users」という名前のデータベース テーブルをマップする User エンティティ クラスを定義しました。これには、$id、$name、$email の 3 つの属性があります。アノテーションは、Doctrine ORM にこれらのプロパティのマッピング方法を指示します。たとえば、$id プロパティは主キーで自動インクリメントされ、$name プロパティは varchar 型のデータベース列にマッピングされ、$email プロパティは varchar 型にマッピングされ、データベーステーブル内で一意である必要があります。

マッピング

エンティティを定義した後、エンティティをデータベーステーブルにマッピングする方法をDoctrine ORMに指示する必要があります。 XML、コメント、または YAML を使用してマッピング関係を定義できます。

ここでは、アノテーションを使用してマッピング関係を定義します。たとえば、以下のコードでは、User エンティティを users データベース テーブルにマップするマッピング関係を定義します。

/**
 * @ORMEntity
 * @ORMTable(name="users")
 */
class User
{
    // properties ...

    // many-to-one association
    /**
     * @ORMManyToOne(targetEntity="Department")
     * @ORMJoinColumn(name="department_id", referencedColumnName="id")
     */
    private $department;
}
ログイン後にコピー

上のコードでは、Department Many を持つ User エンティティを定義します。エンティティ間の 1 対 1 の関係。すべてのマッピング関係定義には注釈を付ける必要があります。

Query

Doctrine ORM は、CRUD 操作を簡単に実行できるようにする、使いやすいクエリ API のセットを提供します。たとえば、次のコードは、Doctrine を使用してエンティティをクエリする方法を示しています。

$userRepository = $entityManager->getRepository('User');
$users = $userRepository->findAll();

foreach ($users as $user) {
    echo sprintf("-%s
", $user->getName());
}
ログイン後にコピー

上記のコードでは、$entityManager 変数を使用してユーザー リポジトリ インスタンスを取得します。次に、findAll() メソッドを使用してすべての User インスタンスを取得し、各インスタンスのユーザー名を出力します。

概要

この記事では、設定、エンティティ、マッピング、クエリなど、Doctrine ORM の基本的な知識を紹介します。 ORM は、データベース関連関数のコーディングを大幅に簡素化できる非常に強力なツールです。この記事が ORM を理解するのに役立ち、Doctrine ORM についてさらに学び、使い始めることができることを願っています。

以上がオブジェクト リレーショナル マッピング (ORM) の基礎: Doctrine ORM を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ORM フレームワーク Python での Tortoise ORM の実践 ORM フレームワーク Python での Tortoise ORM の実践 Jun 10, 2023 pm 06:05 PM

ORM フレームワーク Python での Tortoise ORM の実践

PHP の ORM PHP の ORM May 24, 2023 am 08:14 AM

PHP の ORM

PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? May 07, 2024 am 08:39 AM

PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか?

Hibernate ORM フレームワークの欠点は何ですか? Hibernate ORM フレームワークの欠点は何ですか? Apr 18, 2024 am 08:30 AM

Hibernate ORM フレームワークの欠点は何ですか?

PHP のオブジェクト リレーショナル マッピングとデータベース抽象化レイヤーによってコードの可読性が向上する仕組み PHP のオブジェクト リレーショナル マッピングとデータベース抽象化レイヤーによってコードの可読性が向上する仕組み May 06, 2024 pm 06:06 PM

PHP のオブジェクト リレーショナル マッピングとデータベース抽象化レイヤーによってコードの可読性が向上する仕組み

Phalcon フレームワークで ORM (オブジェクト リレーショナル マッピング) を使用するにはどうすればよいですか? Phalcon フレームワークで ORM (オブジェクト リレーショナル マッピング) を使用するにはどうすればよいですか? Jun 03, 2023 pm 09:21 PM

Phalcon フレームワークで ORM (オブジェクト リレーショナル マッピング) を使用するにはどうすればよいですか?

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate はポリモーフィック マッピングをどのように実装しますか?

Java Hibernate フレームワークの ORM メカニズムとは何ですか? Java Hibernate フレームワークの ORM メカニズムとは何ですか? Apr 17, 2024 pm 02:39 PM

Java Hibernate フレームワークの ORM メカニズムとは何ですか?

See all articles