2009-11-03 101 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

相關問題