Доктрина 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 ответ:
используйте аннотацию JoinColumn для вашего отношения ManyToOne:
/** * @ORM\ManyToOne(targetEntity="Package", inversedBy="users") * @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false) */ private $package;
сам ManyToOne не может быть nullable, потому что он не относится к определенному столбцу. С другой стороны, JoinColumn идентифицирует столбец в базе данных. Таким образом, вы можете использовать "нормальные" атрибуты, такие как nullable или unique!