現在我成功地創建了一個函數,它使用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