Доктрина 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

говорит, что нет атрибута nullable в отношении ManyToOne. чего мне не хватает?

class User
{

    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

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

}

class Package
{

    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

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

}

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

 @ORMJoinColumn(name="package_id", referencedColumnName="id", nullable="false")

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

@ORMJoinColumn(name="package_id", referencedColumnName="id", nullable=false)
1 92

1 ответ:

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

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

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