14

今のところ、Doctrineの関数createQueryBuilderを使用してデータベースからデータを取得する関数を作成することに成功しました。

データベースを挿入または更新するための同様の関数があるかどうか誰かが知っていますか?または、どのようにcreateQueryBuilderを使用できますか?

4

4 に答える 4

31

Doctrine 2 ORMは、 DQLまたはDQLクエリビルダーINSERTを介してサポートしていません。完全な構文については、DQLのEBNFを確認してください。

ORMで挿入を処理するには、常に手動でエンティティをインスタンス化し、エンティティマネージャーで永続化します。

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

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

SELECTUPDATEおよびDELETEDoctrineORMのDQLを介してのみ処理できます。

  • 選択する:

    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'));
于 2013-03-26T06:06:02.130 に答える
8

代わりにQueryBuilderを使用する別のオプションは、DoctrineDBALの準備および実行関数を使用することです。おそらくQueryBuilderを使用するほど柔軟ではありませんが、状況によってはINSERTを使用すると便利な場合があります。

使用方法は、エンティティマネージャからデータベース接続を取得することです。

$sql = "INSERT INTO table (field1, field2) VALUES ('foo', 'var')";
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindValue(':invoice', $invoiceId);
$result = $stmt->execute();
于 2013-03-27T01:08:26.707 に答える
8

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)
于 2016-06-21T08:28:25.600 に答える
0

DQLまたはSQLを作成する意思がない限り、QueryBuilderを使用してデータを挿入することはできません。データベーステーブルにデータを単純に挿入する方法を探している場合は、まず、データを挿入するテーブルのEntityクラスにデータがロードされていることを確認する必要があります。例えば$em->persist($entity);

于 2016-03-10T14:00:45.393 に答える