1

通常はエンティティを遅延ロードするだけですが、今はノードを配列としてフェッチできるDQLを作成する必要があります。いくつかのクエリを試しましたが、機能させることができません。以下に2つの例を示します。

// example one
$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType INSTANCE OF ?1')
    ->setParameter(1, $type)->getArrayResult();
// example two
$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType_id = ?1')
    ->setParameter(1, $type->id)->getArrayResult();

INSTANCE OFが実際に何をするのかわかりませんが、機能しませんでした。私のアノテーションにはデータベーステーブルだけが持つnodeType_idがないため、nodeType_idの使用も機能しませんでした。

では、これに対する正しいアプローチは何ですか?

4

2 に答える 2

2

nodeTypeとは何ですか?文字列だけの場合は、次のものだけが必要です。

$this->em
    ->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType = ?1')
    ->setParameter(1, $type)
    ->getArrayResult();

継承を使用していて、特定のタイプのノードが必要な場合は、次を使用します。

$this->em
    ->createQuery("SELECT n FROM Entities\Node n WHERE n INSTANCE OF $type")
    ->getArrayResult();

$ typeは:のようなものでなければならないことに注意してください$type = 'Entities\Nodes\NodeSubclass'。パラメータとして追加することはできません。

于 2011-05-05T00:58:34.220 に答える
0

次のような等号を使用する必要がありました。

$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType = ?1')
    ->setParameter(1, $type->id)->getArrayResult();

ここで、typeは別のエンティティです。

于 2011-05-05T13:22:57.503 に答える