web-dev-qa-db-fra.com

Laravel Eloquent: Retourne la clé du tableau en tant qu'ID de champs

Lorsque j'exécute une requête via l'ORM Eloquent de Laravel, je souhaite obtenir l'ID de ligne en tant que clé de résultat de tableau. Cela facilitera les choses lorsque je veux vérifier quelque chose en fonction d'un ID (en utilisant array_key_exists) besoin d'une entrée spécifique du tableau de résultats)

Puis-je demander à Eloquent de définir la clé sur les champs ID? voir image http://oi60.tinypic.com/kc02a8.jpg

33
Broshi

Vous pouvez simplement faire 

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

À votre santé :)

83
Bhoj Raj Bhatta

Comme vous avez une collection Eloquent (une classe child de la classe generic Collection ), vous pouvez utiliser la méthode getDictionary . $collection->getDictionary() vous donnera un tableau de vos objets Category, classés par leurs clés primaires.

Si vous voulez une autre collection plutôt qu'un tableau natif PHP, vous pouvez utiliser plutôt $collection->keyBy($property). Il semble que votre clé primaire soit category_id, donc $collection->keyBy('category_id'). Vous pouvez utiliser cette méthode pour saisir une propriété quelconque, y compris les mutateurs d’obtention que vous avez écrits.

Alors que getDictionary est unique pour l'extension Eloquent Collection, keyBy est disponible pour tous les objets Laravel Collection. Voir les documents Laravel 4.2 API ou Laravel 5.0 API .

30
tremby

Vous avez un Support\Collection/Database\Eloquent\Collection vous pouvez utiliser la méthode lists('id') pour renvoyer un tableau de l'id de chacun des modèles de la collection. 

Utilisez ensuite array_combine pour mapper les clés sur les modèles. Le résultat sera un tableau avec l'id mappé sur le modèle correspondant. 

4
Matt Burrow

Si vous avez besoin d'un identifiant en tant que clé, utilisez la Collection:

$collection = Model::all();

$collection->getDictionary();

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

Sinon, gentil ou pas, vous pouvez faire ceci:

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

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