Phalcon ORM: hasOne(self)

Phalcon ORM: hasOne(self)

我的数据库中有一个自引用 table,我想使用 Phalcon ORM 将其作为对象提取。 hasOne() 关系在加入其他 table 时起作用,但在尝试引用自身时似乎不起作用。当试图 var_dump($treeNode->TreeNodes) 它 returns 什么都没有。使用 XDebug 检查对象 returns 'Cannot evaluate expression'。

有谁知道如何在 Phalcon 中执行此操作?

public function organisationAction()
{
    $organisation = new Organisations();
    $organisation->setConnectionService(Registry::setConnection(Connections::UK_Connection));
    $organisation = $organisation->findFirst(123);
    $treeNodes = $organisation->TreeNodes;
    foreach($treeNodes as $treeNode){
        var_dump($treeNode->TreeNodes);
    }
}

class TreeNodes extends Model
{
    public $node_id;
    public $tree_id;
    public $tree_parent_node_id;
    public $tree_level_id;
    public $node_desc;

    public function getSource()
    {
        return "TreeNodes";
    }

    public function initialize()
    {
        $this->setSource("TreeNodes");
        $this->hasOne(
            'tree_parent_node_id',
            'TreeNodes',
            'node_id',
            array(
                'reusable' => true
            )
        );
    }
}

实现此目的的一种简单方法是定义附加关系

$this->belongsTo('tree_parent_node_id', // which column
                 'TreeNodes', // referenced table
                 'id', // referenced table column
                 ['alias' => 'parentNode']);

为避免混淆,您可以为该关系起一个别名。 ['alias' => 'parentNode']

现在您应该可以使用

访问相关的父节点了
$treeNode->getRelated('parentNode');

有关 Phalcon aliases 的更多信息。