现在我succeded创建,使用学说的功能createQueryBuilder从数据库中检索数据的功能。
有谁知道是否有类似的功能,以插入或更新数据库? 或者我如何使用createQueryBuilder?
现在我succeded创建,使用学说的功能createQueryBuilder从数据库中检索数据的功能。
有谁知道是否有类似的功能,以插入或更新数据库? 或者我如何使用createQueryBuilder?
原则2 ORM不支持INSERT
通过DQL或DQL查询生成器 。 对于一个完整的语法,检查DQL的EBNF 。
为了处理插入的ORM,你总是手动实例化一个实体与实体管理器坚持它:
$user = new \My\Entity\User();
$entityManager->persist($user);
$entityManager->flush();
你只能处理SELECT
, UPDATE
和DELETE
通过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'));
你不是使用的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();
如果你使用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)
使用QueryBuilder的插入数据是不可能的,除非你愿意写DQL或者SQL。 如果你正在寻找一种方式来简单地将数据插入到数据库表,你必须首先是确保数据装入到要在其中插入数据表的实体类。 例如$em->persist($entity);