这些getParent()和getChildren()有什么作用?这一切都与数据库中的父子表关系有关吗?如果是这样,我应该在Zend_Model或Zend_Db_Table中将这些 - parent_type和parent_id放在哪里?
如何在控制器中调用getParent()/ getChildren()以及它们将返回什么。
我可以对表关系使用Zend常规约定。
答案 0 :(得分:1)
我已经弄明白了。我发现getParent(<itemType>)
和getChildren(<itemType>)
返回Core_Model_Item_Abstract
。但是,您必须分别在子表和父表模型中设置$_parent_type
和$_children_types[array]
(不在_model_dbtable
中)。
您还必须在子表getChildrenSelectOfItemType($obj,$params = array()
中创建一个model(_Model_DbTable_)
,该表返回Zend_Db_Select
,您必须定义此选择将返回的内容。
SE中的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)放在带有匹配id的db bugs表中)
如果在MyModule_Model_Bug中设置“$ _parent_is_owner = true”(未声明$ _owner_type和$ _parent_type),则用户将成为父级,因此getParent将返回用户
最重要的一点是
主题,观众和所有者
在socialengine背景下......
查看器 =正在查看该页面的任何人(主要是登录用户).e.g。 John是一位正在查看照片的登录用户 - 一个主题。
主题 =观众查看主题和/或查看者实际查看主题。例如如果用户John查看相册/照片,则相册/照片是主题。
所有者 =所有者拥有物品/主题。例如约翰是他的照片(主题)的拥有者。如果约翰正在查看杰瑞的照片,主题是杰瑞的照片,但主人是杰瑞。
答案 1 :(得分: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)。
当然,您可以覆盖这些方法。 例如,请参阅:class Album_Model_Photo extends Core_Model_Item_Abstract :: getParent($ type = null)
3)你可以尝试,但它可能很棘手,因为SE从Zend框架代码库中改变了很多。