교리 2는 manyToOne 관계에서 nullable = false를 사용할 수 없습니까?


110

User하나가 Package연결되어 있습니다. 많은 사용자가 동일한 패키지를 참조 할 수 있습니다. 정의 User없이는 존재할 수 없습니다 Package. User관계를 소유해야합니다. 관계는 양방향이므로 a Package에는 0 명 이상의 사용자가 있습니다.

이러한 요구 사항은 이어질 ManyToOne에 대한 관계 UserOneToMany의 관계 Package교리 2에 단 package_id에서 user테이블 (즉, 외래 키입니다) 허용 null값을. 설정을 시도 nullable=false했지만 명령 :

 php app/console doctrine:generate:entities DL --path="src" --no-backup

nullable관계에 대한 속성이 없음을 나타 냅니다 ManyToOne. 내가 뭘 놓치고 있니?

class User
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
     */
    private $package;

}

class Package
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="package")
     */
    private $users;

}

편집 : 해결되었습니다. 참고하시기 바랍니다 이 잘못된 것 (큰 따옴표에 유의) :

 @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false")

이것이 맞지만 :

@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)

답변:


193

ManyToOne 관계에 JoinColumn 주석을 사용하십시오.

/**
 * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
 * @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
 */
private $package;

ManyToOne 자체는 특정 열과 관련이 없기 때문에 nullable이 될 수 없습니다. 반면 JoinColumn은 데이터베이스의 열을 식별합니다. 따라서 nullable 또는 unique와 같은 "일반"속성을 사용할 수 있습니다.


감사합니다. 시도했지만 불행히도 열 package_id은 여전히 ​​Null-예, 기본값-NULL로 플래그가 지정됩니다. 어떤 도움이라도 대단히 감사합니다.
gremo 2012 년

5
신경 쓰지 마세요. 큰 따옴표는 완전히 깨뜨립니다. 그건 nullable="false"틀렸어!
gremo 2012 년

데이터베이스를 완전히 삭제하고 새로 만들려고 했습니까? 방금 내 데이터베이스를 살펴 봤는데 (위에서 언급 한 것과 동일한 JoinColumn 주석을 사용하여) NotNull로 플래그가 지정되었습니다!
Sgoettschkes 2012 년

5
이것에 대해 감사합니다, 나는 왜 @ORM\Column(nullable=true)내 manytoone을 nullable로 만들 수 없었는지 궁금했습니다 !
Scott Flack

올바른 옵션을 구성했지만 잘못된 값이있는 데이터베이스 열이 계속 표시되는 경우 Entity Manager에 대한 메타 데이터 캐시를 지우는 것을 잊지 마십시오. Symfony에서는 다음 console doctrine:cache:clear-metadata명령 을 사용할 수 있습니다.
Massimiliano Arione
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.