2009-11-03 95 views
9

有人向我解释了Doctrine自动生成的文件<ModelName>.class.php<ModelName>Table.class.php之间的区别吗? 例如在Jobeet教程中有JobeetJob.class.php和JobeetJobTable.class.phpSymfony在<ModelName> .class.php和<ModelName>之间的区别Table.class.php

我不明白每个文件的作用,以及我必须为模型类添加方法的位置。

+0

这非常类似于:http://stackoverflow.com/questions/11714387/choosing-between-symfonys-doctrine-orm-files-model-class-php-and-modeltable-cla/11729994#11729994 – Omn 2013-03-21 23:02:59

回答

3

XXX.class文件包含Doctrine_Record后代,该后代旨在对单个记录进行操作。保存,创建,编辑等。 XXXTable.class.php保存Doctrine_Table后代,该后代旨在对整个表格进行操作。例如搜索记录。

+0

分形器,因此,我们可以推断创建,编辑,删除功能将属于XXX.class和所有查询,如 - 选择从哪里> ....将成为XXXTable.class.php的一部分? – 2010-10-13 15:09:25

+0

对于查询你可以更好地使用DQL。它更强大。 – 2010-10-20 07:49:14

2

Your Modelname.class.php文件包含容器类,例如Post。这个类具有表中一行的所有方法和属性,例如Post表。如果你在表格中有像id,文字等那样的列,你可以通过Post类访问它们。

但是,您的PostTable(或XxxxxTable类)是引用,意味着此类应该负责查询表以获取数据。

让我举个简单的例子。比方说,你想从表中拉出一个单一的职位,然后编辑。

首先,您会喜欢$post = Doctrine::getTable('Post')->findOneById(1);这是从表类完成的,因为您需要从特定表中提取某些数据。

现在你有你的文章(如Post对象),因为->findOneById(...)为你查询数据库。然后你可以编辑它,例如$post->title = "a nice title"。最后,保存你的帖子$post->save();

例外情况是,当您想要获取相关对象时,例如可能会回复您的帖子。这将通过您已经拉出到$post的对象完成。

我希望我明确表达了我的观点 - 如果没有,请不要犹豫,再提问。

+2

我想添加进一步解释Table类,您可以通过编写自己的方法来扩展此类的功能,例如,如果您始终通过查找即将发生的事件来查询Events表,则可以使用Doctrine :: getTable( “Events”) - > getUpcomingEvents()为例。 – richsage 2009-11-03 18:34:52

+0

是的,但你可以和其他班级一起做。假设你有一个名为“firstname”和“lastname”的模型 - 那么你就可以创建方法 - > getFullName()。重要的一点,但。 – phidah 2009-11-04 00:15:30

相关问题