Php getparent和getChildren的函数

Php getparent和getChildren的函数,php,socialengine,Php,Socialengine,这些getParent()和getChildren()做什么?这一切都和数据库中的父子表关系有关吗?如果是这样的话,我应该在Zend_模型或Zend_Db_表中将这些-parent_type和parent_id放在哪里 如何在控制器中调用getParent()/getChildren(),以及它们将返回什么 我可以对表关系使用Zend normal约定吗 1) 是的,它们用于父子关系,但不是通过Zend本机机制(\u Dependentables、\u referenceMap等) 您可以在这里

这些getParent()和getChildren()做什么?这一切都和数据库中的父子表关系有关吗?如果是这样的话,我应该在Zend_模型或Zend_Db_表中将这些-parent_type和parent_id放在哪里

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

  • 我可以对表关系使用Zend normal约定吗

  • 1) 是的,它们用于父子关系,但不是通过Zend本机机制(\u Dependentables、\u referenceMap等)

    您可以在这里找到这些方法:抽象类Core\u Model\u Item\u abstract extensed Engine\u Db\u Table\u行实现Core\u Model\u Item\u接口(application/modules/Core/Model/Item/abstract.php)

    寻找方法参数,它们很重要

    2) 通常,它们用于检索数据库行。例如,查看组\u PhotoController::editAction():

    //按id获取照片(engine4\u group\u photos.photo\u id)

    //按组id查找父级(engine4\u group\u photos.group.id)

    我们在这里得到了组行对象(组\模型\组)

    当然,您可以覆盖这些方法。 请参见此处的示例:类相册\模型\照片扩展核心\模型\项\抽象::getParent($type=null)


    3) 您可以尝试,但这可能会很棘手,因为SE与Zend framework代码库相比变化很大。

    我已经找到了答案。我发现
    getParent()
    getChildren()
    返回
    核心模型项目摘要
    。但必须分别在子表模型和父表模型中(不在
    \u model\u dbtable中)设置
    $\u parent\u type
    $\u children\u types[array]

    您还必须在子表
    模型(\u model\u DbTable)
    中创建一个
    getChildrenSelectOfItemType($obj,$params=array()
    ,它返回一个
    Zend\u Db\u Select
    ,您必须定义此Select将返回的内容

    这里SE中的
    ItemType
    表示
    moduleName\u itemname
    (例如相册照片)

    假设account和bugs具有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\u Api::xAE()->getItem('mymodule\u account',1);//1=匹配的帐户\u id
    $bug=$account->getChildren('mymodule_bug');//返回核心模型项目抽象或行obj

    获取父表行不太复杂,在子表中声明
    $\u parent\u type
    ,并且数据库子表中必须存在parent\u id列-bug

    $bug=Engine\u Api:::()->getItem('mymodule\u bug',1);//1=bug\u id
    $account=$bug->getParent();**//返回核心\模型\项目\抽象/行obj
    (不要忘记在db bug表中放置一个具有匹配id的引用列(父\ id)

    如果在MyModule\u Model\u Bug中设置“$\u parent\u is\u owner=true”(未声明$\u owner\u type和$\u parent\u type),则用户将成为家长,因此getParent将返回用户

    要知道的一件最重要的事情是

    主体、观众和所有者

    在社交引擎环境中

    Viewer=正在查看页面的任何人(主要是登录用户)。例如,John是正在查看照片(主题)的登录用户

    主题=主题由观众查看和/或观众实际查看主题。例如,如果用户John查看相册/照片,则相册/照片为主题

    所有者=所有者拥有一个物品/主题。例如,John是他的照片(主题)的所有者。如果John正在查看Jerry的照片,主题是Jerry的照片,但所有者是Jerry

    $group = $photo->getParent('group');
    
    public function getChildrenSelectOfMyModuleAccount($obj,$params = array())
        {
    
        $select = $this->select();
        $select ->where('account_id = ?', $obj->getIdentity());
    
        return $select;
        }
    
    }