0

如何使用以下模型查找记录的所有祖先(不仅是直接父):

class Model_Category extends ORM {

protected $_belongs_to = array(
        'parent' => array('model' => 'Category', 'foreign_key' => 'category_id'),
);

protected $_has_many = array(
        'children' => array('model' => 'Category', 'foreign_key' => 'category_id'),
);

$category->parent->find() 仅给出直接父级,即使尝试使用递归函数获取父级的父级时,它也会抛出 Kohana_Exception: Method find() cannot be called on loaded objects。

这对我来说很自然,我想必须有一种简单的方法来做到这一点——我不确定是我自己还是缺乏关于 ORM 关系的文档——停!

4

3 回答 3

1

使用嵌套集。例如,https://github.com/evopix/orm-mptt。它有特殊的方法,如,parents()等。当然,这需要在您的数据库表中进行修改。children()siblings()

于 2013-05-06T12:35:00.350 回答
1

您应该能够使用递归函数或 while 循环来执行此操作

$current = $category;
while ($current->parent->loaded())
{
    //save $current
    $current = $category->parent;
}
于 2013-05-06T09:18:10.300 回答
0

好的,原来相关模型实际上是包括在内的,因为如果你这样做

$category->parent->parent->name 它将是 $category 的祖父母的名称。

我的问题是我正在打印 $category->parent->as_array() 并期望在(多维)数组中看到父关系,而 kohana 似乎并非如此。

于 2013-05-06T01:31:02.173 回答