PHP Active Record中的自引用关系

时间:2010-11-27 16:28:29

标签: php activerecord

我正在尝试使用PHP Active Record创建一个页面树,我似乎无法让它设置正常工作。

以下是我用于Page类的代码:

class Page extends ActiveRecord\Model {

    static $belongs_to = array(array('parent_page', 'class_name' => 'Page'));

    static $has_many = array(
        array('pages')
    );

    public static function get_top_level_pages() {
        return Page::all(array('conditions' => 'parent_page_id = 0'));
    }

}

我的名为Pages的数据库表中包含以下列:

id
parent_page_id
type
title
meta_title
content

有谁知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我不确定这是否是将类与自身联系起来的“最正确”方法,但它似乎对我有用。

首先,我将表中的parent_page_id更改为page_id,并使用以下类将该类放在一起:

class Page extends ActiveRecord\Model {

    static $has_many = array(
        array('pages')
    );

    static $belongs_to = array(array('page', 'class_name' => 'Page'));

    public static function get_top_level_pages() {
        return Page::all(array('conditions' => 'page_id = 0'));
    }

    public function get_parent() {
        return $this->page;
    }

    public function get_children() {
        return $this->pages;
    }

}

我创建了get_parent()和get_children()函数,因为 - > page和 - >页面对我来说没有意义,而且这些函数有助于清除它。

我愿意接受更好或更“正确”的解决方案。

JP

答案 1 :(得分:0)

我也在努力解决这个问题(烦人的问题)。

您错过了foreign_key(这只会指向您的列名称)。

我已修改您的代码并将其粘贴在下方:

class Page extends ActiveRecord\Model {

    //make sure that you define the 'foreign_key'

    static $belongs_to = array(
        array('parent_page', 'class_name' => 'Page', 'foreign_key' => 'parent_page_id')
    );

    static $has_many = array(
        array('pages')
    );

    public static function get_top_level_pages() {
        return Page::all(array('conditions' => 'parent_page_id = 0'));
    }    
}

$parent_page = Page::find(20)->parent_page; // this works fine