Eloquent obtiene solo una columna como matriz


84

¿Cómo obtener solo una columna como una matriz dimensional en laravel 5.2 usando elocuente?

Yo he tratado:

$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();

pero este lo da como una matriz de 2 dimensiones como:

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

pero quiero conseguirlo como:

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

Respuestas:


181

Puedes usar el pluckmétodo:

Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();

Para obtener más información sobre qué métodos están disponibles para usar con la colección, puede consultar la Documentación de Laravel .


Gracias, esa fue la función que vi en algún lugar pero ya no la encontré, también para el registro, para que la respuesta sea presice, luego tal vez agregue -> toArray () ya que devuelve la colección en este momento y la selección se puede dejar fuera de la consulta para laravel 5.2 al menos.
Riiwo

Es cierto que selectes redundante, pero no veo ningún problema en tener una colección como resultado, porque una colección es solo una matriz elegante que se puede iterar sobre lo mismo que una matriz. Rara vez utilizo matrices en lugar de colecciones, ya que la huella de memoria generalmente no es un problema, y ​​las colecciones se pueden convertir fácilmente a matrices donde sea necesario porque implementan el toArraymétodo. Sin embargo, para mantener la coherencia con su pregunta, modifiqué la respuesta para convertir el resultado.
Bogdan

En este momento soy bastante nuevo en laravel y soy elocuente, así que los necesitaba como una matriz de números para luego fusionar la matriz con una similar y usarla en otra consulta
Riiwo

¡Gracias por compartir esto!
Bhargav Nanekalva

3
Si bien a Collectiontambién tiene un pluck()método, lo que está utilizando es un método QueryBuilder.
Paul Spiegel

12

Si recibe varias entradas, el método correcto se llama listas .

    Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();

2
¡Increíble! El lists()bien funciona por sí solo. Gracias.
moreirapontocom

1
¡Auge! Esto funciona perfectamente. Pero no es necesario utilizar la función toArray () porque lists () devuelve una matriz.
Sahan

1
lists()está en desuso en Laravel Ver.5.2 y posteriores, donde pluck()como en la respuesta etiquetada es el camino.
Masa Sakano

7

Eso se puede hacer en resumen como:

Model::pluck('column')

donde modelo es el modelo como Usermodelo y columna como nombre de columna comoid

si lo haces

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

Y, por supuesto, puede tener cualquier otra cláusula como wherecláusula antes de arrancar


5

Me encontré con esta pregunta y pensé que aclararía que el método list () de un objeto constructor elocuente se depreció en Laravel 5.2 y se reemplazó con 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();

Estos métodos también se pueden llamar en una colección, por ejemplo

// <= 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');

-3

Creo que puedes lograrlo usando el siguiente código

Model::get(['ColumnName'])->toArray();


¿Puedes explicar eso?
J ... S

1
Hasta donde yo sé, hacer Model::get(['ColumnName'])->toArray();es equivalente a hacer, lo Model::select('ColumnName')->get()->toArray()que da como resultado una matriz multidimensional.
SamBremner
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.