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

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

Эти требования приводят к соотношению ManyToOne для User и OneToMany отношения Package в Doctrine 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;

}

РЕДАКТИРОВАТЬ : решено. обратите внимание , что это неправильно (обратите внимание на двойные кавычки):

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

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

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

1 Ответ

179 голосов
/ 13 марта 2012

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

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

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

...