2009-09-03 3 views
1

MVC 패턴을 사용하여 응용 프로그램을 빌드하는 데 CakePHP를 사용하고 있지만 질문은 언어에 구애받지 않습니다.MVC 초보자 질문 - 다 대 다 관계 편집

ITEMS (id, name, description) 
LOCATIONS (id, name) 

항목 테이블 항목의 유형 ("사과", "오렌지", "바나나")를 설명하지 개별 항목 :

여기 내 데이터의 일부에 대한 개요입니다.

각 위치는 각 항목의 개수를 가질 수 있습니다. 나는이 "재고"정보를 편집 할 수 있어야 이제

ITEMS_LOCATIONS (id, item_id, location_id, quantity) 

// eg (1, "home", "apple", 5) --> I have 5 apples at home 
// (2, "work", "apple", 2) --> I have 2 apples at work 
// (1, "home", "orange", 1) --> 1 orange at home 
// (Don't worry - I have numeric ids... this is just an example) 

하지만 정확히 어떤 모델 또는 컨트롤러 처리해야 확실하지 않다 :이 다 대다 관계를 유지하기 위해,이 테이블이 그것?

locations 컨트롤러에 editInventory 동작이 있어야합니까? 또는 items 컨트롤러에 editLocations 또는 무엇을 사용해야합니까? 나는 새로운 모델을 만들어야 할까?

+0

구경꾼은 CodeIgniter를 고려해 보셨습니까?나는 CakePHP 나 Symfony보다 훨씬 가볍기 때문에 선호한다. – cletus

+0

저는 (분명히)이 프레임 워크의 새로운 브랜드입니다. 그래서 실제로 어떻게 작동하는지 테스트하고 있습니다. CI 또는 Kohana는 분명히 내가 봐도 될 것입니다. – nickf

답변

1

이에 대한 실제 하드 및 빠른 규칙이 없습니다. 당신에게 가장 이해되는 것을 사용하십시오. 귀하의 경우에는

, 당신은 아마 그래서 아마도 가장 나을 /location/42/items 또는 /location/42/inventory 또는 /location/42/items/edit 같은 URL을 가지고하는 위치에 항목을 제어 할 수 있습니다. Ergo, LocationsController에서 적절한 조치를 취하십시오.

다른 방법으로 항목의 위치를 ​​제어하려면 /item/42/locations이 더 적합 할 수 있습니다.

둘 다 똑같이 "중요"하다면 특별히 컨트롤러가 필요하고 /inventory/edit/42을 사용하는 것이 좋습니다. saveAll()를 사용하는 경우는 HABTM 모델을 업데이트하도록

모델에 관해서는, 당신은 당신의 $data 어느 쪽이든 수험하거나 $this->Item->ItemsLocation->save()처럼 직접 HABTM 모델을 조작 할 수 있습니다. 일반적으로 은 HABTM 모델을 구울 필요가 없습니다. 다른 모델에 연결해야하는 경우는 제외합니다.

1

이것은 일종의 주관적인 표현입니다.

인벤토리 항목 세부 정보 편집을위한 인벤토리 컨트롤러의 편집 작업과 위치 세부 정보 편집을위한 위치 컨트롤러의 편집 작업이 있어야합니다.

관계 관리에 관해서는 관계를 어떻게 다루는 지 생각하고 싶을 것입니다. 일반적으로 항목에 위치를 추가 할 가능성이 높습니다.이 경우 항목 컨트롤러에 AddLocation 동작이 필요할 수 있습니다. 또는 위치 컨트롤러에 AddItem 액션을 원할 경우 위치에 항목을 추가 할 가능성이 더 높습니다. .... 어쩌면 당신은 두 가지를 가서이 경우에 어쩌면이 ItemLocations 컨트롤러를 만들 가능하고이 일을

HTH

0

위치 ID를 항목 컨트롤러에 전달하는 경향이 있으며이를 항목 레코드에 외래 키로 저장해야합니다.

+0

그것은 many-to-many (hasAndBelongsToMany) 관계입니다. 각 위치에는 많은 항목이있을 수 있으며 각 항목에는 여러 위치가있을 수 있으므로 items 테이블에 locationId를 저장할 수 없습니다. – nickf