Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan Doctrine ORM untuk operasi pangkalan data dalam rangka kerja Symfony

Cara menggunakan Doctrine ORM untuk operasi pangkalan data dalam rangka kerja Symfony

WBOY
WBOYasal
2023-07-29 16:13:141574semak imbas

Cara menggunakan Doctrine ORM untuk operasi pangkalan data dalam rangka kerja Symfony

Petikan:
Rangka kerja Symfony ialah rangka kerja PHP popular yang menyediakan banyak alatan dan komponen berkuasa untuk membina aplikasi web dengan cepat dan mudah. Salah satu komponen utama ialah Doctrine ORM, yang menyediakan cara yang elegan untuk mengendalikan operasi pangkalan data.

Artikel ini akan memperkenalkan secara terperinci cara menggunakan Doctrine ORM untuk melaksanakan operasi pangkalan data dalam rangka kerja Symfony. Kami akan membincangkan topik berikut:

  1. Mengkonfigurasi ORM Doktrin
  2. Kelas entiti dan pemetaan pangkalan data
  3. Menjalankan operasi CRUD
  4. Pembina pertanyaan dan pertanyaan DQL
Mengkonfigurasi Doctrine


.

Doctrine.

Doctrine ny, kami Pertama anda perlu memasang Kumpulan Doktrin. Jalankan arahan berikut dalam terminal: .env文件中添加以下内容:

composer require doctrine/doctrine-bundle

usernamepassworddb_name替换为你自己的数据库连接信息。

然后,打开config/packages/doctrine.yaml文件,添加以下配置:

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

二、实体类和数据库映射
Doctrine ORM使用实体类来代表数据库中的表。我们需要为每个表创建一个实体类,并将其与数据库进行映射。

首先,创建一个名为src/Entity的目录。在该目录中创建一个名为User.php的文件,并添加以下内容:

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

在上面的例子中,我们创建了一个名为User的实体类,并将其与users表进行了映射。id属性被定义为自动生成的主键,name

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方法...

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

Selepas pemasangan selesai, kami perlu mengkonfigurasi maklumat sambungan Doctrine. Tambahkan yang berikut pada fail .env:

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

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

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

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

Ganti nama pengguna, kata laluan dan db_name dengan pangkalan data anda sendiri maklumat sambungan.

Kemudian, buka fail config/packages/doctrine.yaml dan tambah konfigurasi berikut:

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 Kelas entiti dan pemetaan pangkalan data

Doctrine ORM menggunakan kelas entiti untuk mewakili jadual dalam pangkalan data. Kita perlu mencipta kelas entiti untuk setiap jadual dan memetakannya dengan pangkalan data.

Mula-mula, buat direktori bernama src/Entity. Cipta fail yang dipanggil User.php dalam direktori itu dan tambah kandungan berikut:

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

Dalam contoh di atas, kami mencipta fail bernama User kelas Entiti dan memetakannya ke jadual pengguna. Atribut id ditakrifkan sebagai kunci utama yang dijana secara automatik dan atribut name ialah rentetan.


3. Lakukan operasi CRUD

Doctrine ORM menyediakan banyak kaedah mudah untuk melaksanakan operasi CRUD (buat, baca, kemas kini dan padam).

Buat entiti baharu:

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

Baca entiti:

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

Kemas kini entiti:

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));
}
🎜Padam entiti:🎜rrreee🎜4. (Bahasa Pertanyaan Doktrin) untuk melaksanakan pertanyaan kompleks. 🎜🎜Contoh Pembina Pertanyaan: 🎜rrreee 🎜Contoh Pertanyaan DQL: 🎜rrreee🎜Kesimpulan: 🎜Menggunakan Doctrine ORM dalam rangka kerja Symfony untuk operasi pangkalan data adalah sangat mudah dan cekap. Artikel ini menerangkan cara mengkonfigurasi ORM Doktrin, mencipta kelas entiti, melaksanakan operasi CRUD dan menggunakan pembina pertanyaan dan pertanyaan DQL. Saya harap artikel ini dapat membantu anda menggunakan Symfony dan Doctrine ORM dengan lebih baik untuk membangunkan aplikasi web berkualiti tinggi. 🎜

Atas ialah kandungan terperinci Cara menggunakan Doctrine ORM untuk operasi pangkalan data dalam rangka kerja Symfony. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn