- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Symfony2学习笔记之数据库操作
数据库和Doctrine
让我们来面对这个对于任何应用程序来说最为普遍最具挑战性的任务,从数据库中读取和持久化数据信息。幸运的是,Symfony和Doctrine进行了集成,Doctrine类库全部目标就是给你一个强大的工具,让你的工作更加容易。
Doctrine是完全解耦与Symfony的,所以并不一定要使用它。
一个简单例子:一个产品,我们首先来配置数据库,创建一个Product对象,持久化它到数据库并把它读回来。
首先我们需要创建一个bundle:
$php app/console generate:bundle --namespace=Acme/StoreBundle
配置数据库
在开始之前,首先需要配置数据库连接信息。根据惯例,这些信息通常会配置在app/config/parameters.ini 文件中。
复制代码
;app/config/parameters.ini
[parameters]
database_driver = pdo_mysql
database_host = localhost
database_name = test_project
database_user = root
database_password = password
复制代码
将配置信息定义到parameters.ini文件中也是一个常用的做法。定义在该文件中的配置信息将会被主配置文件在安装Doctrine时引用。
复制代码
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
复制代码
通过把数据库信息分离到一个特定的文件中,你可以很容易的为每个服务器保存不同的版本。现在Doctrine知道你的数据库配置了,你可以用它来创建一个数据库了。
$php app/console doctrine:database:create
创建一个实体类:
假设你创建一个应用程序,其中有些产品需要展示。即时不考虑Doctrine或者数据库,你也应该知道你需要一个Product对象来表现这些产品。在你的AcmeStoreBundle的Entity目录下创建一个类。
复制代码
// src/Acme/StoreBundle/Entity/Product.php
namespace Acme\StoreBundle\Entity;
class Product
{
protected $name;
protected $price;
protected $description;
}
复制代码
这样的类经常被称为“Entity,意味着一个基础类保存数据。它们简单来满足你应用程序的业务需要。不过现在它还不能被保存到数据库中,因为现在它只不过还是个简单的PHP类。一旦你学习了Doctrine背后的概念,你可以让Doctrine来为你创建实体类。
$php app/console doctrine:generate:entity --entity=AcmeStoreBundle:Product --fields=name:string(255) price:float description:text
添加映射信息
Doctrine允许你使用一种更加有趣的方式对数据库进行操作,而不是只是获取基于列表的行到数组中。Doctrine允许你保存整个对象到数据库或者把对象从数据库中取出。这些都是通过映射PHP类到一个数据库表,PHP类的属性对应数据库表的列来实现的。
因为Doctrine能够做这些,所以你仅仅只需要创建一个meatdata,或者配置告诉DoctrineProduct类和它的属性应该如何映射到数据库。这些metadata可以被定义成各种格式,包括YAML,XML或者通过声明直接定义到Product类中。
一个bundle只可以接受一种metadata定义格式。比如,不能把YAML定义的metadata和声明PHP实体类一起混用。
复制代码
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @
文档评论(0)