데이터베이스와 교리 ORM
모든 애플리케이션에서 가장 일반적이고 어려운 작업 중 하나는 데이터베이스에서 데이터 정보를 읽고 유지하는 것입니다. Symfony 프레임워크는 데이터베이스 사용이 필요한 구성 요소를 통합하지 않지만 Doctrine이라는 타사 클래스 라이브러리와 긴밀하게 통합됩니다. Doctrine의 주요 목표는 데이터베이스 상호 작용을 보다 쉽고 유연하게 만드는 강력한 도구를 제공하는 것입니다.
이 장에서는 Symfony 프로젝트에서 풍부한 데이터베이스 상호 작용을 제공하기 위해 교리를 사용하는 방법을 배우게 됩니다.
교리와 심포니는 완전히 분리되어 있으며, 사용 여부는 선택 사항입니다. 이 장은 개체를 관계형 데이터베이스(예: MySQL, PostgreSQL 및 Microsoft SQL)에 매핑하는 것을 목표로 하는 Doctrine ORM에 관한 것입니다. 데이터베이스의 원시 쿼리를 사용하려는 경우 매우 간단합니다. Doctrine DBAL 사용 방법 문서를 참조하세요.
Doctrine ODM 라이브러리를 사용하여 MongoDB에 데이터를 유지할 수도 있습니다. 자세한 내용은 DoctrineMongoDBBundle을 참조하세요.
간단한 예: 제품 ¶
Doctrine의 작동 방식을 이해하기 위한 가장 쉬운 방법은 실제 적용을 살펴보는 것입니다. 이 섹션에서는 데이터베이스를 구성하고 Product
개체를 생성하고 이를 데이터베이스에 유지한 다음 검색해야 합니다. Product
对象,把它持久化到数据库,再取回它。
配置数据库 ¶
真正开始之前,你需要配置你的数据库连接信息。按照惯例,这部分信息通常配置在 app/config/parameters.yml
文件中:
# app/config/parameters.ymlparameters: database_host: localhost database_name: test_project database_user: root database_password: password # ...
通过 parameters.yml
데이터베이스 구성 ¶
실제로 시작하기 전에 데이터베이스 연결 정보를 구성해야 합니다. 일반적으로 이 정보 부분은 일반적으로 app/config/parameters.yml
파일에서 구성됩니다.
# app/config/config.ymldoctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
parameters.yml<을 통해 구성을 정의합니다. /code> , 단지 관례입니다. Doctrine을 구성할 때 해당 파일에 정의된 매개변수는 기본 구성 파일에서 참조됩니다. 🎜<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doctrine="http://symfony.com/schema/dic/doctrine" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config>
<doctrine:dbal driver="pdo_mysql" host="%database_host%" dbname="%database_name%" user="%database_user%" password="%database_password%" />
</doctrine:config></container>
// app/config/config.php$configuration->loadFromExtension('doctrine', array(
'dbal' => array(
'driver' => 'pdo_mysql',
'host' => '%database_host%',
'dbname' => '%database_name%',
'user' => '%database_user%',
'password' => '%database_password%',
),));
$ php bin/console doctrine:database:create
🎜 데이터베이스 정보를 별도의 파일로 분리하면 각 서버에 대해 서로 다른 버전을 쉽게 저장할 수 있습니다. 예를 들어 Apache의 구성 정보처럼 프로젝트 외부에 데이터베이스 구성(또는 민감한 정보)을 쉽게 저장할 수도 있습니다. 자세한 내용은 🎜서비스 컨테이너의 외부 매개변수 설정 방법🎜을 참조하세요. 🎜🎜이제 Doctrine은 데이터베이스에 연결할 수 있으며, 다음 명령은 자동으로 빈 test_project
데이터베이스를 생성할 수 있습니다: test_project
数据库:
$ php bin/console doctrine:database:drop --force
$ php bin/console doctrine:database:create
如果你要用SQLite作为数据库,在path选项中设置你的数据库路径:
<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doctrine="http://symfony.com/schema/dic/doctrine" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config>
<doctrine:dbal driver="pdo_sqlite" path="%kernel.root_dir%/sqlite.db" charset="UTF-8" />
</doctrine:config></container>
// app/config/config.php$container->loadFromExtension('doctrine', array(
'dbal' => array(
'driver' => 'pdo_sqlite',
'path' => '%kernel.root_dir%/sqlite.db',
'charset' => 'UTF-8',
),));
// src/AppBundle/Entity/Product.phpnamespace AppBundle\Entity; class Product{
private $name;
private $price;
private $description;}
创建一个Entity类 ¶
假设你正构建一套程序,其中有些产品需要展示。即使不考虑Doctrine或者数据库,你也已经知道你需要一个 Product
对象来呈现这些产品。在你AppBundle的 Entity
$ php bin/console doctrine:generate:entity