2014-07-17 2 views
1

Phalcon에서 조인을 이해하는 데 어려움이 있습니다. 내가 심지어 조인을 사용하거나 관련 테이블이 어떻게 든 자동으로 매핑되는지 여부는 확실하지 않습니다. 나는 항상 과거의 ORM 작업을 피 했으므로 개념이 조금 새로운 것입니다! 페이지와 섹션PhalconPHP 데이터베이스 ORM에서 조인

class Pages extends \Phalcon\Mvc\Model { 

    public $page_id; 
    public $page_section_id; 
    public $page_title; 
    public $page_url; 
    public $page_description; 
    public $page_tags; 
    public $page_content; 
    public $page_time; 
    public $page_author; 
    public $page_views; 

    public function initialize() { 
     $this->belongsTo('page_author', 'users', 'id'); 
     $this->belongsTo('page_section_id', 'sections', 'section_id'); 
    } 

} 

class Sections extends \Phalcon\Mvc\Model{ 

    public $section_id; 
    public $section_title; 
    public $section_url; 
    public $section_description; 
    public $section_tags; 

    public function initialize(){ 
     $this->hasMany('section_id', 'pages', 'page_section_id'); 
    } 
} 

내가 안 그런 다음 내 컨트롤러에서 나는 $this->modelsManager->createBuilder()을 사용하고

$pages = $this->modelsManager->createBuilder() 
     ->from('Baseapp\Backend\Models\Pages') 
     ->leftJoin('Baseapp\Backend\Models\Sections', 'section.section_id = Baseapp\Backend\Models\Pages.page_section_id', 'section') 
     ->orderBy('page_time DESC') 
     ->getQuery() 
     ->execute() 
     ->toArray(); 
    print_r($pages);exit; // <- let's see what we get here 

이 -

나는 두 개의 테이블이 그것을 밖으로 조인 할 수있을 것 같습니다! 뷰에서

내가

{% for page in pages %} 
    <div class="item"> 
     <div class="content"> 
      <div class="header"> 
       {{ page.page_title }} - {{ page.section_title }} 
      </div> 
     </div> 
    </div> 
{% endfor %} 

그러나 여기에서 큰 문제를 사용할 것, 그것은 단지 반환 페이지 데이터가 아닌 관련 섹션 데이터 것입니다. 즉, 조인은 작동하지 않는 것 같습니다.

그래서 간단한 조인을 수행하거나 조인이 중복되는 것을 간과하는 더 나은 방법이 있습니까? 모델에서

+0

http://stackoverflow.com/questions/21715835/loading-models-with-inner-join – Phantom

답변

1

당신은 예를 들어, 방법을 만들 필요가

/** 
* Returns users which doesn't belong to any organization. 
* 
* @return mixed 
*/ 
public static function getSomething() 
{ 
    $query = User::query() 
     ->columns(__NAMESPACE__ . '\Pages.*') 
     ->leftJoin(__NAMESPACE__ . '\Sections', __NAMESPACE__ . '\Pages.page_section_id = ps.section_id', 'ps') 
     ->where('do something') 
     ->execute(); 

    if ($query->count()) { 
     return $query; 
    } 

    return false; 
} 
관련 문제