今のところ、Doctrineの関数createQueryBuilderを使用してデータベースからデータを取得する関数を作成することに成功しました。
データベースを挿入または更新する同様の機能があるかどうか誰かが知っていますか?または、createQueryBuilderをどのように使用できますか?
Doctrine 2 ORMは [〜#〜] dql [〜#〜] または DQLクエリビルダー を介してINSERT
をサポートしません。完全な構文については、 DQLのEBNF を確認してください。
ORMで挿入を処理するには、常に手動でエンティティをインスタンス化し、エンティティマネージャーで永続化します。
$user = new \My\Entity\User();
$entityManager->persist($user);
$entityManager->flush();
Doctrine ORMでDQLを介してSELECT
、UPDATE
、DELETE
のみを処理できます。
選択する:
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を使用する別のオプションは、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();
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を書く意思がない限り不可能です。データベーステーブルにデータを簡単に挿入する方法を探している場合は、最初に、データを挿入するテーブルのEntityクラスにデータが読み込まれていることを確認する必要があります。たとえば$em->persist($entity);