문제

CakePHP 애플리케이션과 함께 매우 고유 한 데이터베이스를 사용하고 있으며 지금까지 멀티 모델 뷰와 컨트롤러가 잘 작동합니다. 나는 단수 테이블이있다 (Entity) 그게 다 id 외국 키로 다른 여러 테이블에서 entity_id

일부 테이블은 일대일 관계입니다 ( Company 하나입니다 Entity) 그리고 일부는 하나에서 많은 것입니다 (Entity 몇 가지 가질 수 있습니다 Addresses) 등등.

데이터베이스 모델을 변경하지 않습니다, 그래서 이것은 구조입니다.

나는 사용하고있다 saveAll() 다음과 같은 입력 이름을 가진 해당 테이블의 데이터를 저장합니다.

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

그리고 내 세이브는 모두 열심히 일하는 것입니다. BEGIN TRANSACTION, 모두 INSERTS와 마지막 COMMIT ...

하지만 이제 나는 a EntityCategory 그것은 N 관계이며 전체를 만들었습니다. HABTM 모델 내부의 관계.

내가 할 때 작동합니다 save() 그것은 단지 그냥 HABTM 관계, 그리고 내가 사용할 때 모든 것을 절약합니다 saveAll() (이전과 마찬가지로) HABTM 관계.

내가 뭔가를 놓치고 있습니까? 이 작업을 올바르게 만드는 방법은 무엇입니까? 오늘 다음 코드를 사용하고 있습니다.

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

그만큼 saveAll() 모든 데이터를 여러 테이블에 저장하고 ID를 저장합니다. Entity->id 그리고 save() 저장 HABTM 관계이지만, 그것이 옳은지 아니면 구조/모델을 변경하면 문제를 일으킬 수 있는지 확실하지 않습니다.

이것이 그것을 사용하는 가장 좋은 방법입니까? a 옳은 CakePHP 내부의 관계를 저장하는 방법? 당신의 경험/지식이 무엇을 말해 줄 수 있습니까?

도움이 되었습니까?

해결책

다운로드하면 수정됩니다 야간.

그래도 조심하십시오. 다른 것이 깨질 수 있습니다.

다른 팁

Saveall () 및 HABTM 협회의 문제는 알려진 CakePHP입니다. 문제, 1.2 RC2 기준으로 해결되지 않았습니다.

Cakephp에 따르면 관련 모델 데이터를 저장하기위한 최상의 프레이트로 FAS 자세한 해설서:

"관련 모델로 작업 할 때는 해당 CakePHP 모델에 의해 항상 모델 데이터 저장을 수행해야한다는 점을 인식하는 것이 중요합니다. 새 게시물과 관련 주석을 저장하는 경우 저장 중에 게시물 및 주석 모델을 모두 사용하게됩니다. 작업."

그러나 Saveall () 및 Save ()를 사용하면 작동해야하며 IMHO는보다 유연하고 일반적인 솔루션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top