Elocuente obtiene solo una columna como matriz

4 minutos de lectura

avatar de usuario
Riiwo

¿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 bidimensional como:

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

pero quiero obtenerlo como:

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

avatar de usuario
Bogdán

Puedes usar el pluck mé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 recopilación, puede consultar el Documentación de Laravel.

  • Gracias, esa fue la función que vi en alguna parte pero ya no la encontré, también para que conste, para que la respuesta sea precisa, entonces tal vez agregue ->toArray() ya que devuelve la recopilación en este momento y la selección se puede omitir. de la consulta para laravel 5.2 al menos.

    – Riiwo

    20 de enero de 2016 a las 23:10

  • Cierto sobre el select ser redundante, pero no veo ningún problema en tener una colección como resultado, porque una colección es solo un lujoso matriz que se puede iterar sobre lo mismo que una matriz. Rara vez uso arreglos en lugar de colecciones, ya que la huella de memoria generalmente no es un problema, y ​​las colecciones se pueden convertir fácilmente en arreglos donde sea necesario porque implementan el toArray método. Sin embargo, para mantener la coherencia con su pregunta, modifiqué la respuesta para convertir el resultado.

    – Bogdán

    20 de enero de 2016 a las 23:19


  • Por el momento, soy bastante nuevo en laravel y eloquent, por lo que los necesitaba como una matriz de números para luego fusionar la matriz con una similar y usarla en otra consulta.

    – Riiwo

    20/01/2016 a las 23:50

  • ¡Gracias por compartir esto!

    – Bhargav Nanekalva

    10 de agosto de 2016 a las 6:58

  • mientras que un Collection también tiene un pluck() método – Lo que está utilizando es un método de QueryBuilder.

    –Paul Spiegel

    14 de febrero de 2017 a las 9:56

Si recibe varias entradas, se llama al método correcto liza.

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

  • ¡Impresionante! los lists() funciona bien por sí mismo. Gracias.

    – moreirapontocom

    27 de septiembre de 2017 a las 0:57

  • ¡Auge! Esto funciona perfectamente. Pero no es necesario usar la función toArray() porque las listas() devuelven una matriz.

    – Disapamok

    11 de enero de 2018 a las 4:57

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

    – Masa Sakano

    8 de septiembre de 2018 a las 11:16

Eso se puede hacer en resumen como:

Model::pluck('column')

donde modelo es el Modelo tal como User modelo y columna como nombre de columna como id

si lo haces

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

y, por supuesto, puede tener otras cláusulas como where cláusula antes de arrancar

avatar de usuario
SamBremner

Encontré esta pregunta y pensé en aclarar que el método de listas () de un objeto constructor elocuente se depreció en Laravel 5.2 y se reemplazó con arrancar ().

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

avatar de usuario
saeid

Creo que puedes lograrlo usando el siguiente código

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

  • ¿Puedes explicar eso?

    – J…S

    17/10/2017 a las 19:28

  • Hasta donde yo sé haciendo Model::get(['ColumnName'])->toArray(); es equivalente a hacer Model::select('ColumnName')->get()->toArray() lo que da como resultado una matriz multidimensional.

    – SamBremner

    5 de enero de 2018 a las 11:43

  • ¿Puedes explicar eso?

    – J…S

    17/10/2017 a las 19:28

  • Hasta donde yo sé haciendo Model::get(['ColumnName'])->toArray(); es equivalente a hacer Model::select('ColumnName')->get()->toArray() lo que da como resultado una matriz multidimensional.

    – SamBremner

    5 de enero de 2018 a las 11:43

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad