2010-07-24 5 views
1

현재 yii-s admin 확장자 인 yiiadmin을 확장 중입니다. yiiadmin - yii-framework admin 인터페이스의 many-to-many

것은 무엇 예를 들어 나는이 article-를 보유 '피봇'테이블이, 다 대다 관계를 표시하는 것으로, 모델 생성보기에서 목록 상자 다중 선택 필드를 얻을 수있는 가장 쉬운 방법이 될 것입니다 범주 관계 및 Article 및 Category 테이블

나는 이미 모델에서 정의 된 이러한 관계를 가지고 있으며 심지어 기사 테이블의 author_id 필드를 통해 얻은 Author.name과 같이 목록보기에 다른 관계를 가져올 수있었습니다.

이제 기사 작성 양식에이 피벗 테이블에 자동으로 저장 될 다중 선택 목록 상자가 포함되기를 원합니다. 여러 항목이 속합니다.

그러므로 article_category 피벗 테이블에 여러 개의 항목/행이 있으므로 아티클을 제출해야합니다.

동시에 아티클 테이블 자체에는 카테고리를 참조하는 필드가 없습니다. 따라서 피봇 테이블은 기사의 id 속성을 선택하여 카테고리 (다른 모델/테이블) ID와 연결하고이를 행에서 제외시킵니다. |

제 >>> ID :

따라서, 예를 들어, 나는이 테이블/모델을 가지고 제목 | 저자 | 텍스트


범주 >>> id | 이름 | 설명


ArticleCategory >>> id | article_id |


CATEGORY_ID 내가보기/(종종 하나의 제출을 ​​통해) yiiadmin의 양식을 만들 기사에서 여러 선택 목록 상자 에서 여러 행이 세 번째 피벗 테이블을 채우는합니다.

나는 카테고리 테이블의 이름을 표시하고, 선택 & 제출하여 ID로 피벗 테이블을 채울 수 있도록 나는 또한 자동으로이 목록 상자로 분류 테이블에서 category.name을 렌더링 할

적절 카테고리 ID-s의 관련 - 카테고리 중 (따라서 이름이 아님)

이 방법이 가능합니까? 그것은 내가 해봤 꽤 잘 작동
http://www.yiiframework.com/extension/cadvancedarbehavior/
합니다 (GII-템플릿 컬렉션이 사용하고 당신을 위해 인구가 관계 폼 요소를 만들 수 CRelated 위젯을 제공합니다

+0

succeded 했습니까? 이게 뭔지 알기를 원해 – Mikelangelo

답변

1

더 쉽게 MANY_MANY 관계를 저장하려면이 확장을 시도 그것은 : http://www.yiiframework.com/extension/gii-template-collection/는)

이 사람은 다 대다 관계와 비슷한 뭔가를 주장 : http://www.yiiframework.com/extension/save-relations-ar-behavior/

또한,이 코드를 직접 작성하는 매우 간단합니다.CHtml :: listBox를 관련 모델과 함께 채우고 액션을 통해 반복하고 간단한 SQL과 함께 '피벗'테이블에 관계를 추가하십시오. 또는 피벗 테이블에 대한 모델을 만들고 일반 save() AR 메서드도 사용합니다. 컨트롤러 작업 대신 afterSave() 모델 이벤트에서이 작업을 수행 할 수 있습니다.

+0

첫 번째 대답은 나 자신에게 비틀 거 렸지만 감사합니다. 다른 사람에 관해서는, 나는 내가 할 수있는 것을 exaust 할 때 가능한 한 빨리 살펴볼 것이다. CadvArBeh .. 어쨌든 CAdvancedArBehaviour를 사용하면 many-to-many에 대한 다중 드롭 다운의 이름을 가져 와서 가져올 수 있고 저장하는 것처럼 보입니다. 그들 모두 하나의 $ _POST 배열로 (나는 뭔가 빠져 있습니까? 엔트리 폼에 추가하는 많은 드롭 다운이 다른 $ _POST 이름을 가지고있는 것처럼 보입니다.) 얼마나 많은 값을 가져올 수 있습니까? 그들의 이름 - 일부 숙련 된 정규식 방법을 제외하고 나는 심지어 숙고를 감히하지 않는다.) –

+0

어쨌든, 나는 수동으로 할 수있는 것을 알지만, 자동화 할 수있는 간단한 방법을 찾으려고 노력하고있다. 기본 작업 내가 다시해야 할 것 같아. 한 가지 더 - 모듈 (응용 프로그램 아님)의 모든보기에 대한 레이아웃을 설정하는 방법이 있습니까? 그렇기 때문에 모든 모듈보기에 대해 $ layout 변수를 반복해서 설정할 필요가 없습니까? –

+0

첫 번째 코멘트를 올바르게 이해했다면 예를 들어 관련된 모델의 POST 변수를 만듭니다. 이를 변경하려면 확장 프로그램을 해킹해야 할 수도 있습니다. 그런 다음 setAttributes를 재정 의하여 해당 POST 변수를 가져올 수 있으므로 투명한 $ model-> attributes = $ _POST [ 'model'] 호출 일뿐입니다. 그것은 꽤 매끄러운 것입니다. 행운을 빕니다! 두 번째 사항 : 블로그 데모에서 CController를 확장하여 기본 $ 레이아웃을 추가하는 예를 살펴보십시오. 그런 다음 모듈의 모든 컨트롤러에 새 컨트롤러를 기본 레이아웃으로 확장하십시오. 꽤 잘 작동합니다. 건배! – thaddeusmt