2014-01-17 75 views
0
  1. getParent()和getChildren()會做什麼?這一切都與數據庫中的父子表關係有關嗎?如果是這樣,我應該在Zend_Model或Zend_Db_Table中將這些parent_type和parent_id放在哪裏?getparent和getChildren的功能

  2. 如何在控制器中調用getParent()/ getChildren()以及它們將返回什麼。

  3. 我可以使用表格關係的Zend常規約定。

回答

1

我已經想通了。我發現getParent(<itemType>)getChildren(<itemType>)返回Core_Model_Item_Abstract。但是,您必須分別在子女和父母表模型中設置$_parent_type$_children_types[array](不在_model_dbtable中)。

您還必須在您的子表model(_Model_DbTable_)中製作getChildrenSelectOfItemType($obj,$params = array(),該表返回Zend_Db_Select,您必須定義此選擇將返回的內容。

這裏的ItemType表示moduleName_itemname(例如album_photo)。

假設帳戶和錯誤具有1:n關係,因此以下必須位於MyModule_Model_DbTable_Bugs中。

public function getChildrenSelectOfMyModuleAccount($obj,$params = array()) 
    { 

    $select = $this->select(); 
    $select ->where('account_id = ?', $obj->getIdentity()); 

    return $select; 
    } 

} 

然後你就可以得到相關的兒童通過(在你的控制器) $account=Engine_Api::_()->getItem('mymodule_account', 1); //1 = matching account_id
$bug=$account->getChildren('mymodule_bug'); //return Core_Model_Item_Abstract or row obj

獲取父錶行並不那麼複雜,在子表中聲明$_parent_type,parent_id列必須存在於數據庫子表中 - 錯誤。

$bug=Engine_Api::_()->getItem('mymodule_bug', 1); //1 = bug_id $account=$bug->getParent();** //return Core_Model_Item_Abstract/row obj(不要忘了把參考列(PARENT_ID)以dB爲單位的錯誤表ID匹配)

如果將 「$ _parent_is_owner =真」 在MyModule_Model_Bug(不宣$ _owner_type和$ _parent_type) ,用戶將成爲父母,因此的getParent將返回用戶知道

其中最重要的是

主題,瀏覽器和業主

在socialengine方面

...

瀏覽器 =人誰是查看頁面(主要是在用戶登錄).e.g。 John是正在查看照片的登錄用戶 - 主題。

主題 =主題被查看者和/或查看者實際查看主題。例如如果用戶John查看專輯/照片,則專輯/照片是主題。

業主 =業主擁有一個項目/主題。例如約翰是他的照片的主人(一個主題)。如果約翰在查看傑裏的照片,主題是傑裏的照片,但所有者是傑瑞。

0

1)是的,他們的父子關係,但不是通過Zend的原生機制(_dependentTables,_referenceMap等)

你可以在這裏找到這些方法:抽象類Core_Model_Item_Abstract擴展Engine_Db_Table_Row實現Core_Model_Item_Interface (application/modules/Core/Model/Item/Abstract.php)

尋找方法參數,它們很重要。

2)通常它們用於檢索數據庫行/行。例如考慮Group_PhotoController :: editAction():

//獲取由ID(engine4_group_photos.photo_id)照片

$photo = Engine_Api::_()->core()->getSubject(); 

//通過GROUP_ID找到父(engine4_group_photos.group.id)

$group = $photo->getParent('group'); 

這裏我們得到了組行對象(Group_Model_Group)。

當然你可以覆蓋這些方法。 3)您可以嘗試一下,但這可能會很棘手,因爲SE在Zend框架代碼庫中做了很多改變。