업데이트 01.09.2016 내 프로젝트를 업데이트했습니다. 이제 내 엔티티에서 사용자 정의 JoinColumn을 제거했습니다. 이제는 하나가 생성되고 프로젝트는 w/o 오류없이 작동합니다. 좋은 생각 심포니 2.7, 교리 2.7 ManyToOne 단방향 관련 JoinColumn을 사용자 정의라는 이름의 사용하도록사용자 정의 JoinColumn 이름을 사용한 Doctrine의 ManyToOne ORM 연관
인가 : 그리고 질문을 단축 하기로 결정?
내 경우였다
많은ipGroup 엔티티 (많은 IP 주소를 유지) 한ipGroupPrameters 엔티티과 연관되어야한다.
1) : 나는 3 개 변종 ('워크 플로우'참조)에서 코드를 실행하려고, 다른 오류를 받고 있어요
(아래 코드 참조). 오류, 만ipGroupParams를 작성 DB 테이블 및 는 ipGroup에게 에 테이블을 임의의 행를 삽입하지;
2). "주의 : 정의되지 않은 인덱스 : ipGroupId"라인 685
$value = $newValId[$targetClass->fieldNames[$targetColumn]];
에서 공급 업체/교리/ORM/lib 디렉토리/교리/ORM/영속/BasicEntityPersister.php 정말 이상하다 - $ targetClass를 는 ipGroupId에있다 fieldNames (디버거가 보여주는 것처럼);
3). (이 변형에서는 이 소유 관계로 변경됨) DBAL 예외 : 'INERT INTO ipGroup (ipGroupId, ip) VALUES (?,?)'를 params [null, "134.17. 26.129 "] ipGroupId는 null 일 수 없습니다. $ gObj에 setIpGroupId 메서드를 적용하고 이것이 RAM에서 업데이트되기 때문에 이것은 마술입니다 (디버거에서 볼 수 있습니다).
워크 플로우은 다음과 같습니다
public function createIpGroup()
{
$this->createParamsObj();
$gObj = new \Bmw\StatBundle\Entity\ipGroup();
$gObj->setIpGroupId($this->groupId);
$gObj->setIp($ip);
### 1 variant
$gObj->setIpGroupParams($this->paramsObj);
### 2 variant
$gObj->setIpGroupParams($this->paramsObj);
$this->em->persist($gObj); // if not rely on cascade persist
### 3 variant
$this->paramsObj->addIpGroup($gObj);
$this->em->persist($this->paramsObj);
###
$this->em->flush();
}
public function createParamsObj()
{
$pObj = new \Bmw\StatBundle\Entity\ipGroupParams();
$this->groupId = $this->container->get('my.id.generator')->generate();
$pObj->setIpGroupId($this->groupId);
$this->em->persist($pObj);
$this->em->flush();
$this->paramsObj = $pObj;
}
다음
이 기관 코드 초기입니다 - 그럼 내가 문서를 실행 세대 :
/**
* ipGroup
*
* @ORM\Table(
* uniqueConstraints={
* @UniqueConstraint(name="ip", columns={"ip"}),
* @UniqueConstraint(name="userId", columns={"userId"}),
* },
* indexes={@Index(name="ipGroupId", columns={"ipGroupId"})},
*)
* @ORM\Entity
*/
class ipGroup
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="ipGroupId", type="integer")
*/
private $ipGroupId;
/**
* @ORM\ManyToOne(targetEntity="ipGroupParams", inversedBy="ipGroup")
* @ORM\JoinColumn(name="ipGroupId", referencedColumnName="ipGroupId")
*/
private $ipGroupParams;
/**
* @var string
*
* @ORM\Column(name="ip", type="string", length=45, nullable=true)
*/
private $ip;
}
: 엔티티가 자동으로 getter 및 setter를 만들
/**
* ipGroupParams
*
* @ORM\Table(
* uniqueConstraints={
* @UniqueConstraint(name="ipGroupId", columns={"ipGroupId"}),
* }
*)
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class ipGroupParams
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="ipGroup", mappedBy="ipGroupParams", cascade={"persist", "remove"}, orphanRemoval=TRUE)
*/
private $ipGroup;
/**
* @var integer
*
* @ORM\Column(name="ipGroupId", type="integer")
*/
private $ipGroupId;
}
멍청한 질문 : 엔티티 setter 및 getter 생성 한 적이 있습니까? –
예, @GeraldChablowski, getters/setters 생성 코드는 [link] (https://docs.google.com/document/d/1c1V34ekmPbYfDGNAFfRgNVb8Tpvalmo3_dwpNO67NDI/edit?usp=sharing) – Parks