现在我成功地创建了一个函数,它使用Doctrine的函数createQueryBuilder从数据库中检索数据。是否可以使用createQueryBuilder进行插入/更新?如果不是,我应该使用什么功能?
有谁知道是否有类似的函数来插入或更新数据库?或者我如何使用createQueryBuilder?
现在我成功地创建了一个函数,它使用Doctrine的函数createQueryBuilder从数据库中检索数据。是否可以使用createQueryBuilder进行插入/更新?如果不是,我应该使用什么功能?
有谁知道是否有类似的函数来插入或更新数据库?或者我如何使用createQueryBuilder?
Doctrine 2 ORM不支持INSERT
通过DQL或DQL query builder。有关完整的语法,请检查the EBNF of DQL。
要在ORM处理插入,你总是手动实例化一个实体与实体管理器坚持它:
$user = new \My\Entity\User();
$entityManager->persist($user);
$entityManager->flush();
只能处理SELECT
,通过DQL UPDATE
和DELETE
教义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'));
非常感谢您对你的回答:) – user1482442 2013-03-26 13:43:53
如何执行更新并插入相同的事务?我必须使用原生的SQL查询呢? – Geany 2016-06-21 10:28:50
请参阅'$ entityManager-> transactional()' – Ocramius 2016-06-22 00:24:05
您使用QueryBuilder的另一种选择是使用Doctrine DBAL准备和执行功能。可能不如使用QueryBuilder那么灵活,但对于某些情况下的INSERT可能会有用。
使用方法是从实体管理器获取数据库连接。
$sql = "INSERT INTO table (field1, field2) VALUES ('foo', 'var')";
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindValue(':invoice', $invoiceId);
$result = $stmt->execute();
ORM不允许这样做是有原因的。这个想法总是经历各种监听器,计算的提交顺序和DBAL类型转换。 – Ocramius 2013-03-27 03:38:40
使用QueryBuilder插入数据是不可能的,除非您愿意编写DQL或SQL。如果您正在寻找一种简单地将数据插入数据库表的方法,则必须首先确保将数据加载到要插入数据的表的实体类中。例如$em->persist($entity);
如果使用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)
你,伙计,需要采取深入到Symfony2中,学说等等.... – DonCallisto 2013-03-25 15:56:11