Pergunta

Para um site que estou construindo, preciso verificar se um local possui contratos, esses locais podem ter contratos vinculados diretamente a eles ou quando parte de uma organização maior também possui contratos vinculados à organização.

Estou tentando usar uma consulta DQL para verificar primeiro se há contratos vinculados diretamente e, se houver algum vinculado por meio de uma organização com esta consulta:

    $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();

Faz o que eu quero tanto quanto retorna uma matriz com todos os dados que eu preciso:

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) { } 

}

O problema é a chave duplicada ["sc"], porque no PHP quando uma matriz possui teclas duplicadas, essa última chave substitui a primeira (o que eu leio de qualquer maneira), isso torna impossível fazer uma verificação:

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

Não consigo descobrir como fazer o nome da doutrina uma das chaves de maneira diferente ou talvez até mesclar os dois.

Eu tentei usar INDEXBY Mas isso mudou a chave dentro da matriz ['sc'] e não ['sc'].

Alguma ideia?

Foi útil?

Solução

Você pode renomeá -lo dentro da consulta. Então, no seu exemplo, isso só mudaria no sc_id para algo como

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

Ver http://www.doctrine-project.org/projects/orm/1.2/docs/manual/dql-doctrine-query-language/en#select-queries:agregate-values

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top