Laravel Eloquent: Geben Sie den Array-Schlüssel als Feld-ID zurück

Lesezeit: 3 Minuten

Benutzer-Avatar
Broschi

Wenn ich eine Abfrage über Laravels Eloquent ORM ausführe, möchte ich die Zeilen-ID als Array-Ergebnisschlüssel erhalten. Dies erleichtert die Dinge, wenn ich etwas basierend auf einer ID überprüfen möchte (mit array_key_exists) oder einige Nachschlagevorgänge durchführen möchte (wenn ich benötigen einen bestimmten Eintrag aus dem Ergebnisarray)

Gibt es eine Möglichkeit, Eloquent anzuweisen, den Schlüssel auf die Feld-ID zu setzen?
siehe Bild

Benutzer-Avatar
Bhoj Raj Bhatta

Sie können einfach tun

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

Prost 🙂

  • Wenn Sie eine benutzerdefinierte Abfrage durchführen, können Sie sie folgendermaßen verwenden: Model::selectRaw(…)->where(…)->groupBy(‘field’)->get()->keyBy( ‘Feld’)->toArray();

    – Phönix

    12. September 2018 um 14:40 Uhr


Benutzer-Avatar
zittern

Da Sie eine Eloquent Collection (a Kinderklasse des generisch Collection Klasse) du kannst den … benutzen getDictionary Methode. $collection->getDictionary() gibt Ihnen ein Array Ihrer Category-Objekte, die nach ihren Primärschlüsseln verschlüsselt sind.

Wenn Sie anstelle eines nativen PHP-Arrays eine andere Sammlung wünschen, können Sie stattdessen verwenden $collection->keyBy($property). Es sieht so aus, als ob Ihr Primärschlüssel ist category_idAlso $collection->keyBy('category_id'). Sie können diese Methode verwenden, um nach jeder beliebigen Eigenschaft zu schlüsseln, einschließlich aller Get-Mutatoren, die Sie möglicherweise geschrieben haben.

Während getDictionary ist einzigartig für die Eloquent Collection Verlängerung, keyBy ist für alle Laravel verfügbar Collection Objekte. Siehe die Laravel 4.2 API-Dokumentation oder Laravel 5.0 API-Dokumentation.

Du hast ein Support\Collection/Database\Eloquent\Collection Sie können die Methode verwenden lists('id') um ein Array der ID jedes der Modelle innerhalb der Sammlung zurückzugeben.

Dann benutze array_combine um die Schlüssel den Modellen zuzuordnen. Das Ergebnis davon ist ein Array, dessen ID dem entsprechenden Modell zugeordnet ist.

Wenn Sie id als Schlüssel benötigen, verlassen Sie sich auf die Collection:

$collection = Model::all();

$collection->getDictionary();

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

Ansonsten, nett oder nicht, können Sie dies tun:

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

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

Benutzer-Avatar
Null Zeiger

pluck('label','id') in der Ausgabe von get() ist das, wonach Sie in Laravel 5.8+ suchen, was Ihnen eine Sammlung bereitstellt toArray()ed

z.B:

$options = \App\DataChoice::where([ 'field_id' => $dataField->id , 'active' => true ])->get()->pluck('label','id')->toArray();

Ich hatte eine ähnliche Herausforderung – ich wollte ein PHP-Array, damit ich für jede Auswahl ein mit einem erstellen kann, wobei der Wert von ‘s die Spalte für die automatische Inkrementierung der ID und der angezeigte Text der Wert ist.

1334790cookie-checkLaravel Eloquent: Geben Sie den Array-Schlüssel als Feld-ID zurück

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy