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
Vous pouvez simplement faire
Model::all()->keyBy('category_id');
À votre santé :)
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 .
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.
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);