2010-11-27 2 views
1

PHP 액티브 레코드를 사용하여 페이지 트리를 만들려고하는데 제대로 작동하는 데 문제가있는 것 같습니다. 페이지라는PHP 액티브 레코드의 자체 참조 관계

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')); 
    } 

} 

내 데이터베이스 테이블 내부에 다음과 같은 열이 있습니다 : 여기

내가 페이지 클래스에 사용하고있는 코드입니다

id 
parent_page_id 
type 
title 
meta_title 
content 

사람이 알고 있나요을 제가 잘못 여기서 뭐하는 거지 ?

답변

0

이것이 자신에게 클래스를 링크하는 "가장 올바른"방법인지 확실하지 않지만 나를 위해 잘 작동하는 것 같습니다.

먼저 난 그냥 페이지 ID로 표에 parent_page_id을 변경하고 나는 클래스 다음의 클래스를 사용하여 함께 모여 만든 :) 나는 get_parent()와 get_children를 (생성 기능을

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; 
    } 

} 

을하기 때문에 -> 페이지 및 -> 페이지가 나에게 이해가되지 않았고 함수가이를 명확히하는 데 도움이됩니다.

더 나은 또는 "더 정확한"솔루션을 제공합니다.

일본

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