2012-06-21 2 views
1

저는 Symfony2와 Doctrine 2.0을 사용하고 있습니다. XML 피드에서 데이터를 읽고이를 데이터베이스의 새 항목이나 기존 항목에 매핑하려고합니다. XML 피드의 데이터가 변경되면 기존 엔티티를 업데이트해야하지만 데이터가 추가되면 새 엔티티를 만들어야합니다.Symfony2 XML 데이터를 Doctrine 엔티티와 관계없이 비정규 화합니다.

function denormalize(SerializerInterface $serializer, $data, $format = null) 

(내 엔티티 클래스 내에서 호출 심포니 \ 구성 요소 \ 시리얼 \ 시리얼에 정의)

: 나는 기업의 특성에 XML 데이터를 매핑하는 데 다음과 같은 비정규 방법을 사용하고 내 엔티티 클래스에서

이 메소드의 문서에서는 "denormalize() 호출이 구현 자의 모든 자식 객체를 재귀 적으로 비정규 화해야 함을 이해하는 것이 중요합니다." 그리고 이것은 내가하려는 일입니다. 엔티티는 EntityManager에 대해 알지 않아야합니다. 그렇다면 관련/자식 엔티티가 이미 존재하는지 여부를 denormalize() 메소드에서 확인하십시오.

종류와 관련, 마태 복음

답변

0

제 접근 방식에 문제가 있다고 생각합니다. 실제로는 제 코드가 아닙니다!

원래 XML에서 표현 된 엔티티를 발견 할 때마다 (EntityManager를 사용하여) 엔티티를 비정규 화하기 전에 새로운 것인지 기존인지 확인했습니다. XML에 중복이 있었기 때문에이 경로를 사용했으며 EntityManager에서 중복 된 엔티티를 만드는 것에 대해 걱정했습니다. 엔티티가 이미 존재하는지 확인하는 것은 내가 복제본을 만드는 대신 기존 엔티티를 업데이트 할 수 있다는 것을 의미합니다. 이제는 XML로 표현 된 엔티티를 찾을 때마다 새로운 방식으로 새로운 엔티티로 분류합니다. 물론 이것은 XML에있는 것처럼 EntityManager에서 중복을 생성하지만 나중에 처리 할 수 ​​있습니다 ..!

$ em-> merge();를 사용하여 EntityManager에서 중복 엔티티를 병합하려고 할 때 몇 가지 문제가 발생하지만 지금까지는 더 나은 해결책으로 입증되었습니다. 및 계단식 = { "지속", "병합"}. 나는 여기에 대한 새로운 질문을 게시 한 : Doctrine 2.1 - Relation Lost After ManyToMany Cascade Merge - Symfony2

마태 복음을

0

참으로 개체의 EntityManager를 호출하는 나쁜 생각 (그리고, 지금까지의 내가, 컨트롤러 외부 아는 한).

나는 그런 문제에 직면 한 적이 없지만 내가 당신이라면 컨트롤러 중 하나에서 비정규 화하려고하거나 컨트롤러에서 호출하는 서비스에서 정말로 귀찮게하는 경우 EntityManager에 (컨트롤러 자체에서 최선을 다하십시오. 또는 단순히 객체를 서비스에 보내서 객체를 XML로 역 정규화 할 수 있습니다).

주어진 엔티티와 상관없이 작동하는 컨트롤러를 작성하는 것이 가장 좋습니다.

희망 하시겠습니까?

+0

감사 가브리엘, 사실은 내가 콘솔 명령에 엔티티를 비정규 해요,하지만이 경우 명령을 추측하거나 컨트롤러가하지 않습니다 차이점이 많습니다. 나는이 문제가 실제로 내가 너무 빨리하기 위해 노력했다는 사실이며 이제는 새로운 접근 방식을 채택하기로 결정했다고 생각한다. 아래에서 좀 더 자세히 설명하겠습니다. 당신의 생각을 저에게 말 해주세요 :) – mattvick