2010-05-11 2 views
2

cakephp에서 간접적으로 연관된 모델을 다루는 데 몇 가지 문제가 있습니다. 내가 한 형태 안에이 모든 모델에 대한 정보를 저장하기 위해 노력하고있어CakePHP : 간접적으로 연관된 모델의 단점

Deliveries hasOne License 
License belongsTo Delivery 
License hasAndBelongsToMany Product (and vice-versa) 
License hasAndBelongsToMany ProductOption (and vice-versa) 

다음과 같이 내 현재의 모델 설정입니다. 내가 만나는 단점은 다음과 같습니다.

  1. 양식 헬퍼는 한 레벨 깊이의 필드 유형 만 볼 수 있습니다.

  2. saveAll()은 레코드를 한 레벨 깊게 만 저장할 수있는 것처럼 보입니다 (여러 모델 양식의 경우).

나는이 문제에 대한 솔루션을 모든 곳에서 찾고 있어요,하지만 난 CakePHP의 새로운 해요 이후, 나는 새로운 방법 또는 "올바른"방법은 이러한 문제를 처리하기위한 무엇인지 확실하지 않다.

모든 조언을 주시면 감사하겠습니다. 다들 감사 해요!

편집 : http://bin.cakephp.org/saved/58501

+0

양식에서 일부 코드를 게시 할 수 있습니까? 이 경우 라이센스의 의미는 무엇입니까? – jimiyash

+0

저희 회사는 일반적으로 고객이 구매 한 여러 유형의 소프트웨어 "제품"을 구매 한 "제품 옵션"과 함께 실행할 수있는 소프트웨어 "라이센스"를 실제로 "배달"합니다. – Dan

답변

0

시려면()는 (여러 모델 형태의) 기록을 깊은 한 수준을 저장할 수 것 : 여기 내 시도가 실패한 코드를 게시했습니다.

나는 과거에이 한계점을 우연히 발견했고, 당시에는 내 양식을 여러 개의 작은 양식으로 분리하여 해결하기로했습니다.

saveAll과 InnoDB 테이블을 사용할 때 염두에 두어야 할 점 중 하나는 데이터베이스에 변경 사항을 적용 할 수 없을 때 Cake가 롤백을 수행하므로 원자 트랜잭션이 발생한다는 것입니다.

따라서 Cake의 saveAll one-liner는 기대치에 미치지 못하기 때문에 몇 줄의 코드로 문제를 해결할 수 있지만 트랜잭션이 필요한 경우에는 더 많은 시간을 소비해야합니다. .

0

안녕하세요이 이전 게시물 알고 있지만 호출 시려면()에 옵션을 사용하여 모델 협회의 여러 수준을 절약 할 수 있습니다 CakePHP는 2.1으로 내가 여기에, 다른 사람들을 돕기 위해 자세한 내용이 게시 거라고 생각 : http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-1.html#model-saveall-model-saveassociated-model-validateassociated

예 :

는 당신이 같은 손실로 FormHelper 제한에 관해서는, 난
$this->MyModel->saveAll($this->request->data, array('deep'=>true)); 

, 나는 아마 내 필드가 너무 많은 검증이 필요하지 않기 때문에 수동으로 입력 유형 설정에 의존합니다.

관련 문제