2015-08-13 38 views
5

Sto tentando di restituire un singolo GroupedList che contiene informazioni da entrambe le pagine e dataobjects. C'è un modo semplice per unire le due liste insieme?Silverstripe unisci elenchi raggruppati

public function getGroupedContent() 
{ 
    $dataobjects = GroupedList::create(FileNetObject::get()); 
    $pages = GroupedList::create($this->Children()); 

    $result = ??; 


    return $result; 
} 

Il ArrayList unione non come fa uno standard array_merge - Sarei migliore fusione dei risultati dalle query insieme prima di metterlo in un unico GroupedList?

+0

do FileNetObject e $ this-> Children() hanno qualcosa in comune? entrambe sono pagine? o puoi raggrupparli con alcuni campi comuni o getter? – wmk

+0

@wmk contengono entrambi i campi titolo che sto usando per raggruppare. –

risposta

1

senza sapere di più sulla tua situazione, il modo più semplice per farlo è:

return array_merge($dataobjects->toArray(), $pages->toArray()); 

Per visualizzare quanto sopra in un modello che si sarebbe naturalmente necessario per avvolgere che in un altro ArrayList.

Aggiornato: se si desidera raggruppare gli elenchi (che ovviamente è il motivo per cui si stava utilizzando una GroupedList in primo luogo), è necessario eseguirlo prima di unire gli array. Più simile a:

return array_merge($dataobjects->GroupBy('Author')->toArray(), $page->GroupBy('Author')->toArray()); 
+0

In seguito, e quindi inserendo i risultati di array_merge in un altro ArrayList, dovrei modificare il modello con qualcosa di diverso dal loop dei figli della groupedlist? (attualmente non restituisce nulla) –

+0

Mi spiace, ho appena notato il tuo commento. Senza vedere il tuo modello è difficile dirlo. Se hai ancora $ GroupBy nel tuo modello, vorrai rimuovere quel bit. Altrimenti se pubblichi il tuo codice posso provare a guardare oltre. –