Maison >développement back-end >tutoriel php >Comment utiliser Doctrine ORM pour les opérations de base de données dans le framework Symfony

Comment utiliser Doctrine ORM pour les opérations de base de données dans le framework Symfony

WBOY
WBOYoriginal
2023-07-29 16:13:141669parcourir

Comment utiliser Doctrine ORM pour les opérations de base de données dans le framework Symfony

Citation :
Le framework Symfony est un framework PHP populaire qui fournit de nombreux outils et composants puissants pour créer des applications Web rapidement et facilement. L'un des composants clés est Doctrine ORM, qui fournit un moyen élégant de gérer les opérations de base de données.

Cet article présentera en détail comment utiliser Doctrine ORM pour effectuer des opérations de base de données dans le framework Symfony. Nous aborderons les sujets suivants :

  1. Configuration de Doctrine ORM
  2. Classes d'entités et mappage de bases de données
  3. Exécution d'opérations CRUD
  4. Générateur de requêtes et requêtes DQL

1. Configuration de Doctrine ORM
Pour utiliser Doctrine ORM dans Symfony, nous d'abord vous devez installer le Doctrine Bundle. Exécutez la commande suivante dans le terminal :

composer require doctrine/doctrine-bundle

Une fois l'installation terminée, nous devons configurer les informations de connexion de Doctrine. Ajoutez ce qui suit au fichier .env : .env文件中添加以下内容:

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

usernamepassworddb_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

二、实体类和数据库映射
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

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

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

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

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

Remplacez username, password et db_name par votre propre base de données informations de connexion.


Ensuite, ouvrez le fichier config/packages/doctrine.yaml et ajoutez la configuration suivante :

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());
}

2. Classes d'entités et mappage de base de données

Doctrine ORM utilise des classes d'entités pour représenter les tables de la base de données. Nous devons créer une classe d'entité pour chaque table et la mapper avec la base de données.

Tout d'abord, créez un répertoire nommé src/Entity. Créez un fichier appelé User.php dans ce répertoire et ajoutez le contenu suivant :

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!');
}

Dans l'exemple ci-dessus, nous avons créé un fichier appelé User Entity class et l'avons mappé à la table utilisateurs. L'attribut id est défini comme une clé primaire générée automatiquement et l'attribut name est une chaîne.

3. Effectuer des opérations CRUD

Doctrine ORM fournit de nombreuses méthodes simples pour effectuer des opérations CRUD (créer, lire, mettre à jour et supprimer).

Créer une nouvelle entité :

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!');
}

Lire l'entité :

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));
}

Mettre à jour l'entité :

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));
}

Supprimer l'entité :

rrreee🎜4. Générateur de requêtes et requête DQL🎜En plus des opérations CRUD de base, nous pouvons également utiliser la création de requêtes et DQL. (Doctrine Query Language) pour exécuter des requêtes complexes. 🎜🎜Exemple de générateur de requêtes : 🎜rrreee 🎜Exemple de requête DQL : 🎜rrreee🎜Conclusion : 🎜L'utilisation de Doctrine ORM dans le framework Symfony pour les opérations de base de données est très simple et efficace. Cet article explique comment configurer Doctrine ORM, créer des classes d'entités, effectuer des opérations CRUD et utiliser des générateurs de requêtes et des requêtes DQL. J'espère que cet article pourra vous aider à mieux utiliser Symfony et Doctrine ORM pour développer des applications Web de haute qualité. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn