2011-01-04 2 views
2

CI 애플 리케이션에서 카테고리 시스템을 구현하고 다 대 다 관계로 작업하는 최상의 방법을 찾으려고합니다.CI에서 다 대다 관계 (ORM을 사용하지 않음)

나는이 단계에서 ORM을 사용하지 않지만 필요한 경우 Doctrine을 사용할 수 있습니다.

각 항목에는 여러 범주가있을 수 있습니다. 많은 - 예상대로,

ENTRYID, entryName, 카테고리 ID, categoryName이

하지만 :

나는 나의 CI 코드는 다음과 같이 레코드 세트를 반환

Entries:    entryID, entryName 
Categories:   categoryID, categoryname 
Entry_Category:  entryID, categoryID 

(간체) 세 개의 테이블을 가지고 대다수 관계에서 각 "항목"은 각 "범주"에 대해 반복됩니다.

Entry Name 
Appears in Category: Foo, Bar 

보다는 : 나는 같은 왼쪽하고 때 출력 결과

가장 좋은 방법은 "그룹"범주는 무엇하는 것이다 있도록

Entry Name 
Appears in Category: Foo 

Entry Name 
Appears in Category: Bar 

나는 믿는다 옵션은 게시물 ID가 이전 항목과 일치하는지 추적하고, 그렇다면 해당 범주를 저장하고 여러 항목이 아닌 하나의 항목으로 출력하지만 CI에서이 작업을 수행하는 방법은 확실하지 않습니다.

감사합니다.이 포인터는 고맙습니다. 시스템에 대한 지식이 없으면 모호하거나 복잡한 질문 일 수 있습니다.

답변

1

등 타사 패키지는 나는이

function has_many($results, $child_table, $parent_key, $child_key){ 


if(count($results) == 0){ 
    return $results; 
} 


$CI = &get_instance(); 

$ids = array(); 
$result_len = count($results); 

for ($i=0; $i < $result_len; $i++) { 
    array_push($ids, $results[ $i ][ $parent_key ]); 
    $results[ $i ][ $child_table ] = array(); 
} 


$q = $CI->db->where_in($child_key, $ids)->get($child_table); 
$children = $q->result_array(); 

foreach($children as $child): 

for ($i=0; $i < $result_len; $i++) { 
    if($results[ $i ][ $parent_key ] == $child[ $child_key ]){ 
     array_push($results[ $i ][ $child_table ], $child); 
    } 
} 

endforeach; 
return $results; 

} 

사용 예를

$q = $this->db->get('parent_table'); 
$nested_result = has_many($q->result_array(), 'child_table', 'id', 'parent_table_id'); 
print_r($nested_result); 
에 대한 도우미를 생성

어린이에게 추가 쿼리 매개 변수가 필요한 경우 평소와 같이 추가하십시오.

$q = $this->db->get('parent_table'); 
$this->db->order_by('some_field', 'ASC'); 
$nested_result = has_many($q->result_array(), 'child_table', 'id', 'parent_table_id'); 
print_r($nested_result); 
1

카테고리 선택을 두 번째 선택으로 푸시합니다. 당신이 개발하고이 분류 방식은 블로그와 다른 소셜 사이트에 태그 또는 폭소노미에 해당하는 것이다 경우 각 항목의 기록을 위해, 또한이 선택

select c.categoryID, c.categoryname 
from category c 
join entry_category ec on ec.categoryID = c.categoryID 
where ec.entryID = ? 

에 ENTRYID를 공급, 당신은 사용을 고려해야합니다 같은 freetag