web-dev-qa-db-fra.com

Eloquent n'obtient qu'une seule colonne sous forme de tableau

Comment obtenir une seule colonne sous la forme d'un tableau de dimensions dans laravel 5.2 en utilisant éloquent?

J'ai essayé: 

$array = Word_relation::select('Word_two')->where('Word_one', $Word_id)->get()->toArray();

mais celui-ci lui donne comme tableau de 2 dimensions comme:

array(2) {
      [0]=>
      array(1) {
        ["Word_one"]=>
        int(2)
      }
      [1]=>
      array(1) {
        ["Word_one"]=>
        int(3)
      }
    }

mais je veux l'obtenir comme:

array(2) {
    [0]=>2
    [1]=>3
}
47
Riiwo

Vous pouvez utiliser la méthode pluck :

Word_relation::where('Word_one', $Word_id)->pluck('Word_two')->toArray();

Pour plus d'informations sur les méthodes disponibles pour une utilisation avec collection, vous pouvez consulter le Laravel Documentation .

102
Bogdan

Si vous recevez plusieurs entrées, la méthode correcte est appelée lists .

    Word_relation::select('Word_two')->where('Word_one', $Word_id)->lists('Word_one')->toArray();
7
moxx

Je suis tombé sur cette question et je pensais préciser que la méthode lists () d'un objet constructeur éloquent était dépréciée dans Laravel 5.2 et remplacée par pluck (). 

// <= Laravel 5.1
Word_relation::where('Word_one', $Word_id)->lists('Word_one')->toArray();
// >= Laravel 5.2
Word_relation::where('Word_one', $Word_id)->pluck('Word_one')->toArray();

Ces méthodes peuvent également être appelées sur une collection par exemple 

// <= Laravel 5.1
  $collection = Word_relation::where('Word_one', $Word_id)->get();
  $array = $collection->lists('Word_one');

// >= Laravel 5.2
  $collection = Word_relation::where('Word_one', $Word_id)->get();
  $array = $collection->pluck('Word_one');
2
SamBremner

Cela peut être fait en bref comme:

Model::pluck('column')

où modèle est le modèle tel que User modèle & colonne comme nom de colonne tel que id

si tu fais 

User::pluck('id') // [1,2,3, ...]

& bien sûr, vous pouvez avoir d’autres clauses comme la clause where avant de cueillir

0
APu