Domanda

Per un sito web che sto costruendo, devo verificare se una sede ha contratti, queste sedi possono avere contratti collegati direttamente o quando anche parte di un'organizzazione più grande ha contratti collegati all'organizzazione.

Sto cercando di utilizzare una query DQL per verificare prima se ci sono contratti collegati direttamente e poi se ce ne sono collegati tramite un'organizzazione con questa query:

    $q = self::createQuery("l")
        ->select('sl.sc_id, sl.type, so.sc_id, so.type, l.naam, l.loc_id, l.straat, l.telefoon, l.plaats, l.postcode, l.huisnummer, l.huisnummer_achtervoegsel, o.naam')
        ->from('Locatie l, l.Organisatie o, l.Sc sl, o.Sc so')
        ->orderBy('o.naam, l.naam')
        ->execute();

Fa quello che voglio in quanto restituisce un array con tutti i dati di cui ho bisogno:

array(13) { 
["loc_id"]=> string(2) "93" ["org_id"]=> string(1) "9" ["naam"]=> string(12) "test" 
["Organisatie"]=> array(4) { ["org_id"]=> string(1) "9" ["naam"]=> string(3) "test"
["Sc"]=> array(1) { [0]=> array(6) { ["sc_id"]=> string(1) "1" ["sc_nummer"]=> NULL ["type"]=> string(6) "All-in" } } } 
["Sc"]=> array(0) { } 

}

Il problema è la chiave duplicata ["Sc"], perché in php quando un array ha chiavi duplicate, l'ultima chiave sovrascrive la prima (quello che leggo comunque), questo rende impossibile fare un controllo come:

if(!empty($SC) or !empty($SC2) {}

Non riesco a capire come fare in modo che la dottrina nomini diversamente una delle chiavi o forse anche unirle.

Ho provato a usare INDEXBY ma ciò ha cambiato la chiave all'interno dell'array ['SC'] e non ['SC'] stesso.

Qualche idea?

È stato utile?

Soluzione

Puoi rinominarlo all'interno della query.Quindi nel tuo esempio, ciò cambierebbe solo su sc_id a qualcosa di simile

[...] sl.sc_id AS your_new_key [...]

Vedere http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-lingual/en#select-queries:aggregate-values

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top