我正在使用ramsey/uuid-doctrine包将二进制UUID作为实体的主键:
WHERE YourColumn LIKE 'cp-%'
AND SUBSTRING(YourColumn from 4 for 1) NOT IN('i','l')
我需要为另一个实体构建一个表单,该实体具有ManyToOne关系中的该实体。
所以我在表单构建器中添加了一个EntityType,如下所示:
class Site
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
* @ORM\Column(type="uuid_binary")
*/
private $id;
...
}
一切正常,HTML select将uuids作为键,但是当我提交表单时,我得到了这个验证错误:
的Symfony \元器件\验证\ ConstraintViolation 对象(Symfony \ Component \ Form \ Form).children [site] = 4a41b3c4-4299-11e6-b562-fc3fdb5f816d
引起: Symfony的\分量\表格\异常\ TransformationFailedException 无法反转属性路径“site”的值:选项“4a41b3c4-4299-11e6-b562-fc3fdb5f816d”不存在或不唯一
引起: Symfony的\分量\表格\异常\ TransformationFailedException 选择“4a41b3c4-4299-11e6-b562-fc3fdb5f816d”不存在或不是唯一的
如果我这样做,在控制器中:
$builder->add('site')
它确实找到了实体,因此它存在。
答案 0 :(得分:0)
只有黑客我能找到:我从请求中删除了字段值并稍后手动设置
$site_uuid = $_POST['smart_link']['site'] ?? null;
$request_link = $request->request->get('link');
$request_link['site'] = '';
$request->request->set('link', $request_link);
$form->handleRequest($request);
....
$link->setSite($em->getRepository('AppBundle:Site')->find($site_uuid));