2013-03-28 1 views
1

PHPActiveRecord 및 CodeIgniter를 사용하고 있습니다. 나는 블로그를 만들기 위해 노력하고있다. CMS와 블로그에는 많은 카테고리가 있으며 blogrefs라는 다른 테이블을 참조하고있다. 그래서 기본적으로LEFT JOIN Association에서 알 수없는 열을 반환합니다.

는 는

blogrefs이 blogrefs.blogcat_id

function get_blogs($params = array()){ 

    $CI =& get_instance(); 

    $joins = 'LEFT JOIN blogrefs ON blogs.id = blogrefs.blog_id'; 
    $joins .= 'LEFT JOIN blogcats ON blogrefs.blogcat_id = blogcats.id'; 
    $category = (isset($params['category']))?$params['category']:''; 
    $keyword = (isset($params['keyword']))?$params['keyword']:''; 
    $status = (!isset($params['status']) || $params['status'] == '')?'':$params['status']; 
    $order_by = (isset($params['order_by']))?$params['order_by']:'created_on'; 
    $direction = (isset($params['direction']))?$params['direction']:'DESC'; 
    $limit = (isset($params['limit']))?$params['limit']:''; 
    $offset = (isset($params['offset']))?$params['offset']:''; 
    $st = ''; 
    if($status == ''){ 
     $st = '!'; 
    } 

     if(!empty($category)) 
     { 
      $conditions = array(
       "((blogcats.id = ?) OR (blogcats.parent_id = ?)) 
       AND blogs.status $st= ? 
       AND (blogs.title LIKE '%$keyword%' OR blogs.content LIKE '%$keyword%')",$category,$category,$status 
      ); 

     }else{ 
      $conditions = array(
       "blogs.status $st= ? 
       AND (blogs.title LIKE '%$keyword%' OR blogs.content LIKE '%$keyword%')",$status 
      ); 
     } 

    $result = Blog::find('all',array(
     'include'  => array('blogcat','blogref','user'), 
     'joins'   => $joins, 
     'conditions' => $conditions, 
     'limit'   => $limit, 
     'offset'  => $offset, 
     'order'   => "$order_by $direction", 
     'group'   => 'blogs.id' 
    )); 

    $count = Blog::find('all',array(
     'conditions' => $conditions 
    )); 

    $object = new stdClass; 
    $object->posts = $result; 
    $object->total = count($count); 
    return $object; 

} 

모든 통해 blogcats으로 언급하고 blogrefs.blog_id

blogrefs을 통해 블로그에 언급하고 블로그 => blogrefs => blogcats뿐만 아니라 작동

내가 사용하는 경우

((blogcats.id =?) OR (blogcats.parent_id =?)

특정 카테고리의 블로그를 가져 오려면. 어떤 대답이라도 대단히 감사하겠습니다.

+0

phpactiverrecord를 사용하는 경우 이러한 관련 객체를 모두 빠르게 가져 오는 방법이 없습니까? 협회를 사용하는 것 같습니까? – Nanne

답변

0

매우 명확하지 않습니다. 모델과 CI의 Active Record Class를 사용하지 않는 이유는 무엇입니까?

$this->db->where('blogrefs.blogcat_id', $catid); 
    $this->db->join('blogrefs', 'blogs.id = blogrefs.blog_id'); 
    ... 
0

귀하의 오류와 같은 (http://ellislab.com/codeigniter/user-guide/database/active_record.html)는, 당신이 당신의 가입의 첫 번째 부분을 정의하는 곳의 끝에서 누락 된 공간입니다. 당신은 가입하지 최초 가입 번째 'blog_idLEFT'라는 이름의 컬럼에 대한 것을보고 망쳐 것을 알 이제 내부 될 것입니다 가입 것

LEFT JOIN blogrefs ON blogs.id = blogrefs.blog_idLEFT JOIN blogcats ON blogrefs.blogcat_id = blogcats.id 

:

$joins = 'LEFT JOIN blogrefs ON blogs.id = blogrefs.blog_id'; 
$joins .= 'LEFT JOIN blogcats ON blogrefs.blogcat_id = blogcats.id'; 

은 평가 바깥 쪽 왼쪽 조인.

davedriesmans의 제안을 따르거나 작성중인 최종 mySQL 쿼리를 출력하는 방법을 찾아 보는 것이 좋습니다. (또는 둘 다)