我尝试添加带有计数的输入以生成注册号。 如(二千零十四分之二) 2 - >计数+ 1 2014年 - >这一年
我使用此代码:
->add('registration_number', 'entity', array(
'class' => 'FrontBundle:User',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->select('count(u.id)')
->groupBy('u.id')
->getQuery()
->getResult();
},
))
但是我收到了错误:
Doctrine\ORM\QueryBuilder
类型的预期参数,array
已给出。
我尝试了这个解决方案但没有成功
1-删除该行 - > getResult()
。
return $er->createQueryBuilder('u')
->select('count(u.id)')
->groupBy('u.id')
->getQuery();
错误:
类型" Doctrine \ ORM \ QueryBuilder"的预期参数, "学说\ ORM \查询"给定
2-删除最后2行
return $er->createQueryBuilder('u')
->select('count(u.id)');
错误:
警告:get_class()期望参数1为对象,给定字符串
有什么想法吗?感谢。
答案 0 :(得分:2)
您未从EntityRepository
中选择实体结果。一个疯狂的猜测:它返回一个COUNT(u.id)
字符串而不是一组实体。
看起来'entity'
表单类型不适合您的任务。如果您需要添加注册号,我相信它应该是文本输入(或者可能是隐藏字段,取决于您想要的内容)。因此,您不应该添加实体字段,而应事先生成注册号并将其与表单数据一起传递。如果您要为用户创建表单,则应该如下所示:
// Your controller action
$user = new \FrontBundle\Entity\User();
$qb = $this->getDoctrine()->getRepository('FrontBundle:User')->createQueryBuilder('u');
$regNumber = $qb->select('count(u.id)')
->groupBy('u.id')
->getQuery()
->getResult();
$user->setRegNumber($regNumber);
$form = $this->createForm(new UserType(), $user);
// Your form
// @var FormBuilderInterface $formBuilder
$formBuilder->add('regNumber', 'text', array());
答案 1 :(得分:0)
如果在打开表单时生成了注册号,则可能会为多个用户分配相同的号码。这可以通过在提交表单时分配注册号来最小化。在下文中,我还假设User实体中存在属性registrationNumber
。它是这样的:
...
$em = $this->getDoctrine()->getManger();
...
if ($form->isValid()) {
...
$allUsers = $em->getRepository("YourBundle:User")->findAll();
$n = count($allUsers) + 1;
$date = new \DateTime();
$year = date_format($date, 'Y');
// make it sortable
$l = strlen($n);
$regNumber = $year . str_repeat('0', 5 - $l) . $n;
$user->setRegistrationNumber($regNumber);
....