Symfony2 OneToMany表格现有" One-Record"

时间:2014-09-17 20:43:04

标签: doctrine-orm symfony-2.3

我为我的例子实现了一个表单: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()));
}
}

我刚开始检查作者是否存在表格中输入的名字和姓氏,但我不知道如上所述,如果这是正确的以及如何继续进行。

此致

1 个答案:

答案 0 :(得分:0)

您可以在表单中使用DataTransformers将2个字段lastnamefirstname“转换”为将映射到您的外键的作者对象。

这两个字段必须是一个子表单,以将dataTransformer附加到它。

当您的变换器找不到作者时,它可以返回new Author实体对象。 (您必须将表单作为服务将存储库传递给转换器存储库。

希望这些解释有所帮助。