2014-11-11 11 views
28

Wenn ich eine Abfrage über Laravel Eloquent ORM ausführen, möchte ich die Zeile ID als Array-Ergebnisschlüssel erhalten, dies wird die Dinge einfacher machen, wenn ich etwas auf Basis überprüfen möchte ID (mit array_key_exists) oder einige Nachschlagevorgänge (wenn ich einen bestimmten Eintrag aus dem Ergebnis-Array benötige)Laravel Eloquent: Rückgabe Array-Schlüssel als die Felder ID

Gibt es eine Möglichkeit, wie ich eloquent sagen kann, den Schlüssel zu den Feldern ID zu setzen? see image http://oi60.tinypic.com/kc02a8.jpg

+0

Schleife die Ergebnisse und crea Te ein neues Array? – itachi

+0

Dachte darüber nach, aber ich dachte, es sollte einen Weg geben, es durch eloquente zu tun ...: -/ – Broshi

+0

Ich muss zustimmen, dass Sie es selbst tun müssten. Alternativ können Sie '-> find ($ id)' auf der Sammlung verwenden, um ein Modell nach ID zu finden ... – lukasgeiter

Antwort

5

Sie haben eine Support\Collection/Database\Eloquent\Collection Sie lists('id') die Methode verwenden, um ein Array der ID jedes der Modelle innerhalb der Sammlung zurück.

Verwenden Sie dann array_combine, um die Schlüssel zu den Modellen zuzuordnen. Das Ergebnis davon ist ein Array mit der ID, die dem entsprechenden Modell zugeordnet ist.

27

Da Sie eine Eloquent Collection haben (eine child class der generic Collection class) können Sie die getDictionary method verwenden. $collection->getDictionary() gibt Ihnen ein Array Ihrer Category-Objekte, die mit ihren Primärschlüsseln verknüpft sind.

Wenn Sie eine andere Collection als ein natives PHP-Array wünschen, können Sie stattdessen $collection->keyBy($property) verwenden. Es sieht so aus, als wäre Ihr Primärschlüssel category_id, also $collection->keyBy('category_id'). Sie können diese Methode verwenden, um nach einer beliebigen Eigenschaft zu tasten, einschließlich aller Get-Mutatoren, die Sie geschrieben haben.

Während getDictionary zum Eloquent Collection Erweiterung eindeutig zuzuordnen sind, ist keyBy für alle Laravel Collection Objekte zur Verfügung. Siehe die Laravel 4.2 API docs oder Laravel 5.0 API docs.

1

Wenn Sie ID als Schlüssel benötigen, verlassen dann auf der Sammlung:

$collection = Model::all(); 

$collection->getDictionary(); 

// returns: 
array(
    1 => object(Model) (...), 
    2 => object(Model) (...), 
    ... 
    idN => object(Model) (...) 
); 

Ansonsten schön oder nicht, können Sie dies tun:

$keys = $collection->lists('columnName'); 

$arrayOfModels = array_combine($keys, $collection->getDictionary); 
45

Sie können einfach tun

Model::all()->keyBy('category_id'); 

Prost :)

+0

Dies sollte nach oben verschoben werden, um die beste Antwort zu sein! – Bassem