Доктрина 2 не может использовать nullable = false во многих отношениях?

72

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)
Теги:
doctrine
doctrine2

1 ответ

133
Лучший ответ

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

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

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

  • 0
    Спасибо, я пробовал, но, к сожалению, столбец package_id по-прежнему помечен как Null - Да, по умолчанию - NULL. Буду признателен за любую оказанную помощь.
  • 5
    Неважно, двойная кавычка полностью сломает вещь. Это nullable="false" это неправильно!
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню