我为我的例子实现了一个表单:Author和Book。 (OneToMany关系) (作者在输入的表格中有名字和姓氏,Book有一个需要以同一形式输入的标题)
它运行正常,但是如果具有名字和姓氏的作者记录已经存在呢?
我想到了类似的东西:
namespace Acme\UserBundle\Entity;
use Doctrine\ORM\EntityRepository;
class AuthorRepository extends EntityRepository
{
public function findByFirstnameAndLastname($firstname, $lastname)
{
$parameters = array(
'firstname' => $firstname,
'lastname' => $lastname
);
return $this->getEntityManager()
->createQuery(
'SELECT a FROM AcmeUserBundle:Author a WHERE a.firstname = :firstname AND
a.lastname = :lastname')
->setParameters($parameters)
->getResult();
}
}
创建我的存储库类并检查Record是否已存在。 所以我是Symfony的新手,并且不知道这是否是推荐的方式以及如何坚持 使用现有的作者记录将数据导入数据库。
我的控制器:
namespace Acme\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Acme\UserBundle\Entity\Author;
use Acme\UserBundle\Entity\Book;
use Acme\UserBundle\Form\Type\AuthorType;
class DefaultController extends Controller
{
public function createAuthorAndBookAction(Request $request){
$author = new Author();
$author->addBook(new Book());
$form = $this->createForm(new AuthorType(), $author);
$form->handleRequest($request);
if($form->isValid()){
// check if author already exists ?
$firstname = $form["firstname"]->getData();
$lastname = $form["lastname"]->getData();
$em = $this->getDoctrine()->getManager();
$author = $em->getRepository('AcmeUserBundle:Author')
->findByFirstnameAndLastname($firstname, $lastname);
// End echk
$em = $this->getDoctrine()->getManager();
$em->persist($author);
$em->flush();
}
return $this->render('UserBundle:Main:author.html.twig', array('form' =>
$form->createView()));
}
}
我刚开始检查作者是否存在表格中输入的名字和姓氏,但我不知道如上所述,如果这是正确的以及如何继续进行。
此致
答案 0 :(得分:0)
您可以在表单中使用DataTransformers
将2个字段lastname
和firstname
“转换”为将映射到您的外键的作者对象。
这两个字段必须是一个子表单,以将dataTransformer附加到它。
当您的变换器找不到作者时,它可以返回new Author
实体对象。
(您必须将表单作为服务将存储库传递给转换器存储库。
希望这些解释有所帮助。