Cakephp Hasandbelogstomany를 사용하여 save () vs. saveall ()
-
02-07-2019 - |
문제
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
, 모두 INSERT
S와 마지막 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는보다 유연하고 일반적인 솔루션입니다.