2011-08-20 6 views
6

In Doctrine 1.2, è possibile impostare Key Mapping per una tabella in cui gli oggetti Doctrine_Collection creati da tale tabella popoleranno le chiavi da una colonna specifica in ciascun record della raccolta.Impostazione dell'attributo di mappatura della chiave Doctrine_Collection in schema.yml

Un esempio dalla documentazione legata soprattutto:

Si consiglia di mappare la colonna nome:

// test.php 

// ... 
$userTable = Doctrine_Core::getTable('User'); 

$userTable->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username'); 

Ora collezioni utente utilizzerà i valori della colonna del nome come indici elemento:

// test.php 

// ... 
$users = $userTable->findAll(); 

foreach($users as $username => $user) { 
    echo $username . ' - ' . $user->created_at . "\n"; 
} 

C'è un modo per impostare questo in un file hema.yml?

risposta

5

Durante l'esplorazione di un problema analogo, mi sono imbattuto in this example:

--- 
User: 
    columns: 
    ... 
    attributes: 
    export: all 
    validate: true 

Applicando lo stesso principio con l'attributo coll_key cede questo:

User: 
    columns: 
    ... 
    attributes: 
    coll_key: username 

possiamo verificare dopo aver fatto un costruire che l'attributo è stato accettato:

$this->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username'); 

C'è un avvertimento, però.È necessario creare in modo esplicito la colonna che si desidera utilizzare, oppure Dottrina genera un errore durante il processo di compilazione:

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    attributes: 
    coll_key: slug 
$ symfony doctrine:build --all --no-confirmation 
>> doctrine Dropping "doctrine" database 
>> doctrine Creating "dev" environment "doctrine" database 
>> doctrine generating model classes 
>> file+  /tmp/doctrine_schema_60681.yml 
    ... 
>> doctrine generating form classes 

    Couldn't set collection key attribute. No such field 'slug'.

Per ottenere risultati di cui sopra per lavorare, si avrebbe bisogno di specificare esplicitamente il slug colonna, anche se il modello Sluggable normalmente lo crea automaticamente per te:

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    slug: 
     type: string(50) 
     unique: true 
    attributes: 
    coll_key: slug 
0

Se è possibile, non è ben documentato. È possibile specificare le opzioni per un tavolo nella definizione della tabella, like this Sapendo che

const ATTR_COLL_KEY    = 108; 

proverei:

User: 
    options: 
    attr_coll_key: username 

poi

User: 
    options: 
    attrCollKey: username 

o anche

User: 
    options: 
    108: username 

Non sono riuscito a trovare con precisione dove nel codice sono gestite le opzioni, ma potreste farlo con il debug passo dopo passo di xdebug.

Buona fortuna, e dillo a usare se uno di questi tentativi funziona.

+0

Grazie per i suggerimenti; erano un ottimo punto di partenza! Sono stato in grado di farlo funzionare specificandolo come un attributo piuttosto che un'opzione (vedi la mia risposta per maggiori informazioni). –

+0

@Phoenix: evento non noto, è possibile impostare attributi nello schema, ottimo lavoro! – greg0ire

Problemi correlati