ホームページ >バックエンド開発 >PHPチュートリアル >Symfony フレームワークでのデータベース操作に Doctrine ORM を使用する方法

Symfony フレームワークでのデータベース操作に Doctrine ORM を使用する方法

WBOY
WBOYオリジナル
2023-07-29 16:13:141633ブラウズ

Symfony フレームワークでデータベース操作に Doctrine ORM を使用する方法

はじめに:
Symfony フレームワークは、Web アプリケーションを迅速かつ簡単に構築するための多くの強力なツールとコンポーネントを提供する人気のある PHP フレームワークです。重要なコンポーネントの 1 つは Doctrine ORM で、データベース操作を処理するエレガントな方法を提供します。

この記事では、Doctrine ORM を使用して Symfony フレームワークでデータベース操作を実行する方法を詳しく紹介します。次のトピックについて説明します:

  1. Doctrine ORM の設定
  2. エンティティ クラスとデータベース マッピング
  3. CRUD 操作の実行
  4. クエリ ビルダーと DQL クエリ

1. Doctrine ORM の設定
Symfony で Doctrine ORM を使用するには、まず Doctrine Bundle をインストールする必要があります。ターミナルで次のコマンドを実行します:

composer require doctrine/doctrine-bundle

インストールが完了したら、Doctrine の接続情報を設定する必要があります。 .env ファイルに次の行を追加します:

DATABASE_URL=mysql://username:password@127.0.0.1:3306/db_name

usernamepassword、および db_name を独自のものに置き換えます。データベース接続情報。

次に、config/packages/doctrine.yaml ファイルを開き、次の設定を追加します:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        driver: 'pdo_mysql'
        charset: utf8mb4
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

2. エンティティ クラスとデータベース マッピング
Doctrine ORM が使用するデータベース内のテーブルを表すエンティティ クラス。各テーブルのエンティティ クラスを作成し、それをデータベースにマップする必要があります。

まず、src/Entity という名前のディレクトリを作成します。そのディレクトリに User.php という名前のファイルを作成し、次の内容を追加します。

namespace AppEntity;

use DoctrineORMMapping as ORM;

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

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

    // 添加其他属性和方法...

    // Getter和Setter方法...

    // 其他业务逻辑...
}

上の例では、User という名前のファイルを作成しました # のエンティティ クラスそしてそれを users テーブルにマップします。 id 属性は自動生成された主キーとして定義され、name 属性は文字列です。

3. CRUD 操作の実行
Doctrine ORM は、CRUD (作成、読み取り、更新、削除) 操作を実行するための簡単なメソッドを多数提供します。

新しいエンティティの作成:

public function create()
{
    $entityManager = $this->getDoctrine()->getManager();

    $user = new User();
    $user->setName('John Doe');

    $entityManager->persist($user);
    $entityManager->flush();

    return new Response('User created!');
}

エンティティの読み取り:

public function read($id)
{
    $entityManager = $this->getDoctrine()->getManager();

    $user = $entityManager->getRepository(User::class)->find($id);

    if (!$user) {
        throw $this->createNotFoundException('User not found!');
    }

    return new Response('User name: ' . $user->getName());
}

エンティティの更新:

public function update($id)
{
    $entityManager = $this->getDoctrine()->getManager();

    $user = $entityManager->getRepository(User::class)->find($id);

    if (!$user) {
        throw $this->createNotFoundException('User not found!');
    }

    $user->setName('Jane Doe');

    $entityManager->flush();

    return new Response('User updated!');
}

エンティティの削除:

public function delete($id)
{
    $entityManager = $this->getDoctrine()->getManager();

    $user = $entityManager->getRepository(User::class)->find($id);

    if (!$user) {
        throw $this->createNotFoundException('User not found!');
    }

    $entityManager->remove($user);
    $entityManager->flush();

    return new Response('User deleted!');
}

IV. クエリビルダーと DQL クエリ
基本的な CRUD 操作に加えて、クエリ ビルダーと DQL (Doctrine Query Language) を使用して複雑なクエリを実行することもできます。

クエリビルダーの例:

public function findByName($name)
{
    $entityManager = $this->getDoctrine()->getManager();

    $queryBuilder = $entityManager->createQueryBuilder();
    $queryBuilder->select('u')
        ->from(User::class, 'u')
        ->where('u.name = :name')
        ->setParameter('name', $name);

    $users = $queryBuilder->getQuery()->getResult();

    return new Response('Users found: ' . count($users));
}

DQL クエリの例:

public function findByAge($age)
{
    $entityManager = $this->getDoctrine()->getManager();

    $query = $entityManager->createQuery(
        'SELECT u FROM AppEntityUser u WHERE u.age > :age'
    )->setParameter('age', $age);

    $users = $query->getResult();

    return new Response('Users found: ' . count($users));
}

結論:
データベース操作に Symfony フレームワークで Doctrine ORM を使用するのは、非常にシンプルで効率的です。この記事では、Doctrine ORM の設定、エンティティ クラスの作成、CRUD 操作の実行、クエリ ビルダーと DQL クエリの使用方法について説明します。この記事が、Symfony と Doctrine ORM をより効果的に使用して高品質の Web アプリケーションを開発するのに役立つことを願っています。

以上がSymfony フレームワークでのデータベース操作に Doctrine ORM を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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