是否有可能使用createQueryBuilder的插入/更新? 如果不是这样,我应该使用什么功

2019-07-23 07:14发布

现在我succeded创建,使用学说的功能createQueryBuilder从数据库中检索数据的功能。

有谁知道是否有类似的功能,以插入或更新数据库? 或者我如何使用createQueryBuilder?

Answer 1:

原则2 ORM不支持INSERT通过DQL或DQL查询生成器 。 对于一个完整的语法,检查DQL的EBNF 。

为了处理插入的ORM,你总是手动实例化一个实体与实体管理器坚持它:

$user = new \My\Entity\User();

$entityManager->persist($user);
$entityManager->flush();

你只能处理SELECTUPDATEDELETE通过DQL教义ORM:

  • 选择:

     SELECT u FROM My\Entity\User u WHERE u.id = :userId 
  • 更新:

     UPDATE My\Entity\User u SET u.status = 'banned' WHERE u.id = :userId 
  • 删除

     DELETE My\Entity\User u WHERE u.id = :userId 

您可以处理与QueryBuilder的这些操作,以及:

  • 选择:
    $queryBuilder = $entityManager->createQueryBuilder();
    $queryBuilder
        ->select('u')
        ->from('My\Entity\User', 'u')
        ->where($queryBuilder->expr()->eq('u.id', ':userId'));
  • 删除:
    $queryBuilder = $entityManager->createQueryBuilder();
    $queryBuilder
        ->delete('My\Entity\User', 'u')
        ->where($queryBuilder->expr()->eq('u.id', ':userId'));
  • 更新:
    $queryBuilder = $entityManager->createQueryBuilder();
    $queryBuilder
        ->update('My\Entity\User', 'u')
        ->set('u.status', 'banned')
        ->where($queryBuilder->expr()->eq('u.id', ':userId'));


Answer 2:

你不是使用的QueryBuilder另一种方法,是使用学说DBAL准备和执行功能。 也许是没有用的QueryBuilder灵活,但这样做在某些情况下的INSERT语句中可能是有益的。

使用的方式正从实体管理器数据库连接。

$sql = "INSERT INTO table (field1, field2) VALUES ('foo', 'var')";
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindValue(':invoice', $invoiceId);
$result = $stmt->execute();


Answer 3:

如果你使用DBAL的QueryBuilder,可以插入。

$qb = $connection->createQueryBuilder();

为了与QueryBuilder的是这样的插入:

$qb->insert('MuBundle:MyClass', 'momc')
   ->values (array(
       'property1 (id for example)' => '?'
       'property2 (name for exmaple)' => '?'
   ))
   ->setParameter(0, $id)
   ->setparameter(1, $name)


Answer 4:

使用QueryBuilder的插入数据是不可能的,除非你愿意写DQL或者SQL。 如果你正在寻找一种方式来简单地将数据插入到数据库表,你必须首先是确保数据装入到要在其中插入数据表的实体类。 例如$em->persist($entity);



文章来源: Is there possible to use createQueryBuilder for insert/update? If not, what function should I use?