jobeet第三天:数据模型

*这一系列文章来源于Fabien Potencier,基于Symfony1.4编写的Jobeet Tutirual

假若你现在极其渴望打开你的文本编辑器来开始写PHP代码的话,那么今天的内容就能满足你的心愿了,我们会开始写一些代码了。我们将会定义Jobeet中需要使用到的数据模型,并使用ORM来和数据库进行交互,并且我们还会为应用创建第一个模块(module)。由于Symfony已经为我们做了很多工作,所以我们基本不用写太多的PHP代码就能拥有一个功能齐全的模块了。

关系模型

第二天的用户stories中描述了Jobeet项目中的主要数据对象:职位(jobs),affiliates和分类(categories)。下面是它们之间的实体关系图:

03-01

除了我们在stories中描述的列(columns)之外,我们还添加了created_atupdated_at列。当一个对象被保存到数据库中或者是被更新到数据库中时,created_atupdated_at这两个列将被自动更新。

数据库

为了让职位(jobs),Affiliates和分类(categories)能够被存放在数据库中,Symfony2.3.2使用了ORM工具—Doctrine。为了让应用能够连接到数据库,我们需要编辑app/config/parameters.yml文件(这里使用的是MySQL):

现在我们能让Doctrine连接到我们的数据库了。我们能通过在终端输入下面的命令来让Doctrine帮助我们生成数据库:

 

模式

为了让Doctrine能够“了解“我们的对象,我们需要创建“元数据”文件来描述对象在数据库中存放时对应的字段域。我们先在src/Ibw/JobeetBundle/Resources/config目录下创建一个doctrine目录。doctrine/目录下会包含三个文件:Category.orm.ymlJob.orm.ymlAffiliate.orm.yml

 

 

 

ORM

现在我们在终端输入下面的命令,Doctrine能够按照我们的定义来生成对应的类了:

现在我们可以在src/Ibw/JobeetBundle目录下看到一个Entity目录,在Entity目录中我们可以看到新生成的文件:Category.phpJob.phpAffiliate.php。打开Job.php文件,把created_atupdated_at的值设置如下:

Affiliate类中的created_at进行同样的修改:

上面做的修改会让Doctrine在保存对象或者更新对象的时候更新created_atupdated_at的值。这些Doctrine行为被定义在Affiliate.orm.ymlJob.orm.yml文件的下面。接下来我们让Doctrine来帮助我们生成数据表,输入下面的命令:

 这个任务(task)只能在开发环境(development)中使用。如果需要在生产环境(production)中更新你的数据库的话,你可以查看Doctrine migrations

 

现在数据表已经创建好了,但数据表中还没有任何的数据。对于一个Web应用来说,它们往往具有三类数据:初始数据(应用开始运行时所需要的数据,在Jobeet中我们需要初始化用的分类(categories)数据和管理员(admin)数据),测试数据(测试应用程序时需要用到的数据)和用户数据(用户在使用应用过程中创建的数据)

为了让我们的数据库中能有些初始数据,我们使用DoctrineFixturesBundle来帮我们生成数据。我们来按照下面的步骤来安装DoctrineFixturesBundle:

1、添加下面的代码到composer.json中的require区块中

 

2、更新vender

 

3、在app/AppKernel.php中注册DoctrineFixturesBundle

现在我们已经准备好DoctrineFixturesBundle了,我们在src/Ibw/JobeetBundle/DataFixtures/ORM/目录下创建一些新类来加载数据:

 

现在我们已经把Fixtures写好了,我们可以使用下面的命令来加载这些数据:

 

现在我们可以去数据库看看,我们将会看到数据表中已经有数据了。

查看浏览器

运行下面的命令,它将会创建一个新的控制器(controller)src/Ibw/JobeetBundle/Controllers/JobController.php,这个控制器还带有CURD动作(Action)。

运行命令之后,选择默认的答案(answer)即可,这可能需要被要求做一些配置。

为了能在浏览器中访问到刚生成的控制器,我们需要导入(import)新生成的路由(routes)文件src/Ibw/JobeetBundle/Resources/config/routing/job.yml到主路由文件中:

同时我们需要在Category类中添加__toString()方法,这样做是为了让Job表单能够下拉选择类别(category):

清除缓存:

现在我们可以在浏览器中测试一下了:http://jobeet.local/job/,或者在开发环境中的http://jobeet.local/app_dev.php/job/

03-02

现在我们能够添加或者编辑职位信息(jobs)了。当然啦,你也可以试着让必填项留空或者输入无效的数据,测试一下系统会有什么反应。是的,你可以看到Symfony已经为我们创建了基本的验证规则,这些验证规则是按照我们的数据表来进行定义的。

今天我们就先讲这些啦。在今天的内容中,我们勉强地写了一些PHP代码,同时也有了一个职位(job)模型和job模块(module)。明天我们就来熟悉一下控制器(controller)和视图(view)吧,那么我们明天见。

 

原文链接:http://www.intelligentbee.com/blog/2013/08/09/symfony2-jobeet-day-3-the-data-model/

One comment

发表评论