Самореферентные отношения в PHP Active Record - PullRequest
1 голос
/ 27 ноября 2010

Я пытаюсь создать дерево страниц, используя 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 голосов
/ 06 июля 2012

Я также боролся с этим (раздражающая проблема).

Вы пропустили 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 
0 голосов
/ 27 ноября 2010

Я не уверен, что это "самый правильный" способ связать класс с самим собой, но, похоже, он мне подходит.

Сначала я изменил 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 и -> pages не имеют смысла для меня, и функции помогаютясно, что до.

Я открыт для лучшего или "более правильного" решения.

JP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...