"Groups"와 "Checks"사이의 양방향 다 대다 관계가 있습니다.Doctrine 양방향 many to many
데이터베이스 테이블 :
+--------------------+
| GROUP |
+--------------------+
| id |
| name |
| next |
+--------------------+
+--------------------+
| CHECKFOR |
+--------------------+
| group |
| check |
+--------------------+
+--------------------+
| CHECK |
+--------------------+
| id |
| description |
| author |
+--------------------+
심포니의 교리 엔티티
그룹
<?php
class Group implements GroupInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="name", type="string", length=32, nullable=false)
*/
private $name;
/**
* @ORM\OneToOne(targetEntity="Group")
* @ORM\JoinColumn(name="next", referencedColumnName="id")
* @Serializer\Exclude
*/
private $next;
/**
* @ORM\OneToMany(targetEntity="CheckFor", mappedBy="group")
*/
private $checks;
...
}
확인
0 실행시<?php
class Check implements CheckInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="description", type="string", length=256)
*/
private $description;
/**
* @ORM\ManyToOne(targetEntity="\Jds\UserBundle\Entity\User")
* @ORM\JoinColumn(name="madeByUser", referencedColumnName="id")
* @Serializer\Exclude
*/
private $author;
/**
* @var string
* @ORM\Column(name="kind", type="string", length=20)
*/
private $kind;
/**
* @ORM\OneToMany(targetEntity="CheckFor", mappedBy="group")
*/
private $groups;
}
checkfor는
class CheckFor implements CheckForInterface
{
/**
* @ORM\ManyToOne(targetEntity="Check")
* @ORM\JoinColumn(name="check", referencedColumnName="id")
* @ORM\Id
*/
private $check;
/**
* @ORM\ManyToOne(targetEntity="Group")
* @ORM\JoinColumn(name="group", referencedColumnName="id")
* @ORM\Id
*/
private $group;
...
}
무한 루프 ..->repository->findBy()
에 의해 생성된다. 이 '버그'를 방지하는 방법은 무엇입니까?
로그 :
[2014-12-09 14:04:23] doctrine.DEBUG: SELECT t0.id AS id1, t0.name AS name2, t0.next AS next3 FROM the_group t0 [] []
[2014-12-09 14:04:23] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [1] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["1"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [1] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["2"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [2] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["3"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [3] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["4"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [4] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["5"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [5] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["7"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [7] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["15"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [15] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["10"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [10] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["14"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [14] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["19"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [19] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["25"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [25] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.id AS id1, t0.title AS title2, t0.description AS description3, t0.kind AS kind4, t0.madeByUser AS madeByUser5 FROM the_check t0 WHERE t0.id = ? ["26"] []
[2014-12-09 14:04:24] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [26] []
[2014-12-09 14:05:01] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [2] []
[2014-12-09 14:05:21] doctrine.DEBUG: SELECT t0.check AS check1, t0.group AS group2 FROM checkfor t0 WHERE t0.group = ? [3] []
UPDATE 3 : 나는 문제를 발견했다! 'Checks'는 persistentcollection이지 배열 콜렉션이 아닙니다. persistentcollection이 JMS serializer에서 제대로 작동하지 않습니다. 그룹 개체의 덤프를 인쇄 할 때 dev_log (= correct)에서 2 개의 쿼리를 볼 수 있습니다. serializer를 사용하여 객체를 구문 분석 할 때 +10 개의 쿼리 (= 좋지 않음)가 표시됩니다.
해결책을 찾고 난 후 lazyloading을 사용하지 못하도록 시도했지만 문제가 해결되지 않았습니다.
하면 해당 페이지 하나 하나에 모범을 따르려고 노력 적이있다? joincolumns 제거, 그냥 조인 테이블을 추가하고 이름을 지정하십시오. 또한 생성자를 가져야합니다. – Koalabaerchen
같은 문제가 있습니다. 어떻게 컬럼 이름을 기본값 : "entity_id"와 다른 것으로 설정할 수 있습니까? 이 테스트를 위해 컬럼 이름을 바꿀 수 있습니다. – jsprds