Doctrine 2 не может использовать значение nullable = false в отношении manyToOne?

An User имеет один Package, связанный с ним. Многие пользователи могут ссылаться на один и тот же пакет. User не может существовать без Package. User должно принадлежать отношению. Отношение является двунаправленным, поэтому Package имеет ноль или более пользователей.

Эти требования приводят к отношению ManyToOne для отношения User и OneToMany Package в Доктрине 2. Однако таблица package_id в User (то есть внешняя клавиша) позволяет использовать значения null. Я пробовал установку nullable=false, но команда:

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

Говорит, что для отношения ManyToOne нет атрибута nullable. Что мне не хватает?

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;

}

EDIT: решено. обратите внимание на , что это неправильно (обратите внимание на двойные кавычки):

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

Пока это правильно:

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

Ответ 1

Используйте аннотацию JoinColumn в отношении ManyToOne:

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

Сама ManyToOne не может быть нулевой, поскольку она не относится к определенному столбцу. С другой стороны, JoinColumn идентифицирует столбец в базе данных. Таким образом, вы можете использовать "обычные" атрибуты, такие как нулевые или уникальные!