Когда я добавляю поля своего объекта в формах Symfony, аннотации объектов сопоставляются и основываются на этом предположении Symfony, если мое поле может быть нулевым или нет, настолько хорошее, такие, как этот дамп:Symfony формы, угадать требуемый атрибут в полях ассоциации
public 'fieldMappings' =>
array (size=5)
'acl' =>
array (size=9)
'fieldName' => string 'acl' (length=3)
'type' => string 'smallint' (length=8)
'scale' => int 0
'length' => null
'unique' => boolean false
'nullable' => boolean true
'precision' => int 0
'options' =>
array (size=2)
...
'columnName' => string 'acl' (length=3)
'id' =>
array (size=10)
'fieldName' => string 'id' (length=2)
'type' => string 'integer' (length=7)
'scale' => int 0
'length' => null
'unique' => boolean true
'nullable' => boolean false
'precision' => int 0
'options' =>
array (size=2)
...
'columnName' => string 'id' (length=2)
'id' => boolean true
Но если у меня есть связывающие поля (внешние ключи), Symfony имеет другую структуру отображения и не догадывается, если поле может быть обнуляемым или нет, например, как это свалка:
public 'associationMappings' =>
array (size=3)
'userObj' =>
array (size=19)
'fieldName' => string 'userObj' (length=7)
'joinColumns' =>
array (size=1)
...
'cascade' =>
array (size=0)
...
'inversedBy' => null
'targetEntity' => string 'AdminBundle\Entity\User' (length=23)
'fetch' => int 2
'type' => int 2
'mappedBy' => null
'isOwningSide' => boolean true
'sourceEntity' => string 'AdminBundle\Entity\UserAcl' (length=26)
'isCascadeRemove' => boolean false
'isCascadePersist' => boolean false
'isCascadeRefresh' => boolean false
'isCascadeMerge' => boolean false
'isCascadeDetach' => boolean false
'sourceToTargetKeyColumns' =>
array (size=1)
...
'joinColumnFieldNames' =>
array (size=1)
...
'targetToSourceKeyColumns' =>
array (size=1)
...
'orphanRemoval' => boolean false
'storeObj' =>
array (size=19)
'fieldName' => string 'storeObj' (length=8)
'joinColumns' =>
array (size=1)
...
'cascade' =>
array (size=0)
...
'inversedBy' => null
'targetEntity' => string 'AdminBundle\Entity\Store' (length=24)
'fetch' => int 2
'type' => int 2
'mappedBy' => null
'isOwningSide' => boolean true
'sourceEntity' => string 'AdminBundle\Entity\UserAcl' (length=26)
'isCascadeRemove' => boolean false
'isCascadePersist' => boolean false
'isCascadeRefresh' => boolean false
'isCascadeMerge' => boolean false
'isCascadeDetach' => boolean false
'sourceToTargetKeyColumns' =>
array (size=1)
...
'joinColumnFieldNames' =>
array (size=1)
...
'targetToSourceKeyColumns' =>
array (size=1)
...
'orphanRemoval' => boolean false
В этом случае требуемый атрибут должен быть настроен m в противном случае это будет верно (это значение по умолчанию для форм Symfony).
Кто-нибудь знает, как Symfony может угадать требуемый атрибут в этих случаях? Моя сущность имеет следующие аннотации:
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="fk_user", referencedColumnName="id", nullable=false, unique=false, onDelete="CASCADE")
*/
private $userObj;
/**
* @ORM\ManyToOne(targetEntity="Store")
* @ORM\JoinColumn(name="fk_store", referencedColumnName="id", nullable=false, unique=false, onDelete="CASCADE")
*/
private $storeObj;
Спасибо за ваш ответ, на данный момент я делаю это, но было бы хорошо, если бы Symfony выполнял эту работу так же, как и с оставшимися полями. –