9

と という 2 つのモデルがPersonありTagます。1 人には多くのタグがあり、タグの主キーはperson_idand tag( Doctrine2 の and )Person $personの複合キーです。$tag

大量のデータを含むモデルにデータ フィールド ( BLOB) があります。Tagそのフィールドのデータを必要としないクエリを設定しているので、そのフィールドを取得しないクエリを設定したいと考えています。

次のクエリで試しました:

SELECT c, PARTIAL t.{tag} FROM Contact c LEFT JOIN c.tags

ここで、多少予想されるエラーThe partial field selection of class Tag must contain the identifier が表示されます。問題ありません。連絡先フィールドを追加します。

SELECT c, PARTIAL t.{contact,tag} FROM Contact c LEFT JOIN c.tags

しかし今、クラス Tag に 'contact' という名前のマップされたフィールドはありません

Doctrine2 は複合キーの部分クエリをサポートしていませんか?

タグクラスは次のとおりです。

/** @Entity @Table(name="tag") **/
class Tag
{
    /** @Id @ManyToOne(targetEntity="Contact",inversedBy="tags") @var Contact **/
    protected $contact;
    /** @Id @Column(type="string",length=10,nullable=false) @var string **/
    protected $tag;
    /** @Column(type="blob") **/
    protected $data;
}
4

1 に答える 1

8

部分選択を実行するときは常に、選択元のクラスの主キーを含める必要があります。

実際には「連絡先」エンティティについて詳しく説明していませんが、そのクラスの主キー フィールドは「id」であると想定しています。この場合、次のクエリで目的が達成されます。

SELECT c, PARTIAL t.{id, tag} FROM Contact c LEFT JOIN c.tags

これは文書化されていないようです:(

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#partial-object-syntax

于 2013-04-25T19:43:36.880 に答える