2015-05-26 8 views

Antwort

4

Sie können versuchen, sie zu verketten, aber ich bin mir nicht sicher, dass es Ihnen die gewünschten Ergebnisse bringen wird. Ich habe gerade überprüft diese sollten sicher

$query = Activity::all()->groupBy('performed_at_year_month')->groupBy('performer_id')->toJson(); 

sein überprüfen und Sie sind richtig, es ist nicht Schlüssel zu bewahren, obwohl ich denke, ich kann mir denken, warum. Wenn ein Schlüssel identisch ist, werden die Dinge überschrieben. Es könnte auch schwierig sein zu bestimmen, welcher Schlüssel was ist und insgesamt fühlt sich ein wenig "hacky" an, wo es wahrscheinlich eine viel bessere Lösung gibt.

Ich denke jedoch, ich habe herausgefunden, wie das geht.

$query = Activity::all(); 
$activities = new \Illuminate\Database\Eloquent\Collection($query); 
$activities = $activities->groupBy('performed_at_year_month')->toArray() + $activities->groupBy('performer_id')->toArray(); 
echo json_encode($activities); 
+0

Dank enthält! Dies gibt die Daten korrekt gruppiert zurück, enthält jedoch nicht die Schlüssel (performed_at_year_month, performer_id) für die JSON-Zeichenfolge. Kannst du eine Lösung dafür empfehlen? –

+0

Ich habe meine Antwort aktualisiert. – user3158900

+0

Große Antwort hat mir geholfen! Upvoting. – kevinabraham

18

Die Lösung in https://stackoverflow.com/a/30469061/221745 kann auf Ich denke, verbessert werden. Der Schlüssel ist, sich daran zu erinnern, dass eine Sammlung nach Sammlung eine Sammlung von Sammlungen ist. Daher werden folgende Arbeiten:

<?php 

$recs = new \Illuminate\Database\Eloquent\Collection($query); 
$grouped = $recs->groupBy('performed_at_year_month')->transform(function($item, $k) { 
    return $item->groupBy('performer_id'); 
}); 

Wo $grouped Ihr Endergebnis