getparent和getChildren的功能

时间:2014-01-17 20:30:14

标签: php socialengine

  1. 这些getParent()和getChildren()有什么作用?这一切都与数据库中的父子表关系有关吗?如果是这样,我应该在Zend_Model或Zend_Db_Table中将这些 - parent_type和parent_id放在哪里?

  2. 如何在控制器中调用getParent()/ getChildren()以及它们将返回什么。

  3. 我可以对表关系使用Zend常规约定。

2 个答案:

答案 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框架代码库中改变了很多。