2012-12-12 9 views
8

Ho due modelli chiamati Person e Tag. Una persona ha molti tag e la chiave primaria Tag è una chiave composta da person_id e tag (Person $person e $tag in Doctrine2)."Nessun campo mappato" quando si utilizzano query parziali e tasti compositi in Doctrine2

C'è un campo dati (BLOB) nel modello Tag con molti dati. Sto impostando una query che non richiede i dati da quel campo, quindi voglio impostare una query che non recuperi quel campo.

ho provato con la seguente query:

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

Qui, ottengo l'errore in qualche modo atteso La selezione campo parziale della classe Tag deve contenere l'identificatore. Nessun problema, ho aggiungere il campo di contatto:

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

Ma ora, ottengo Non c'è campo mappato nome 'contatto' sulla classe Tag.

Doctrine2 non supporta query parziali su chiavi composite?

Ecco la classe Tag:

/** @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; 
} 
+0

hai scoperto più su questo error @Nils? – jah

+1

@jah, sfortunatamente no, ho dovuto dividere il modello Tag in due oggetti per ottenere enormi quantità di dati, in modo da poter selezionare gli oggetti TagData quando ho bisogno anche dei dati. una soluzione molto elegante, ma facile da capire e documentare. – Nils

risposta

7

Ogni volta che si esegue una selezione parziale è necessario includere la chiave primaria della classe si sta selezionando da.

In realtà non hai dettagliato la tua entità "Contatto" ma sto assumendo che il campo chiave primaria di quella classe sia "id". Se questo fosse il caso, allora la seguente query acheive quello che stai cercando:

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

Questo non sembra essere documentato :(

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

Problemi correlati