Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

305
Views
Agregue el método de listas () en Query Builder en Laravel 5.4


Sé el hecho de que Laravel eliminó la función de lists() y movió la firma de funciones como pluck() . Pero esto genera mucho trabajo para alguien que quiere actualizar de Laravel 4.x a Laravel 5.4 .

Por lo tanto, estoy tratando de encontrar una manera de hacer uso de la función existente, es decir, lists() en mi código y simplemente hacer uso de pluck()->toArray() cuando se llama a esta función.


He probado lo siguiente.

Método 1

 class BaseModel extends Illuminate\Database\Query\Builder public function __call($method, $args) { return call_user_func_array($this->method,$args); } public function lists($column){ return $this->pluck($column)->toArray(); }

¡No funcionará!.
Motivo: esto debe ampliarse junto con la clase BaseModel. Pero, ya extiende Eloquent Model Class.

Método 2

Intenté agregar la función requerida usando un trait como

listasWorkAround.php

 <?php trait listsWorkAround { function lists($column){ return $this->pluck($column)->toArray(); } }

Modelo.php

 <?php namespace App; use Watson\Rememberable\Rememberable; use Illuminate\Database\Eloquent\Model as Eloquent; abstract class Model extends Eloquent { use listsWorkAround; use Rememberable; }

No, no hay éxito.

Método 3

Intenté agregar un ServiceProvider de servicios y agregar una función de macro para la clase de Builder , es decir lists en este caso.
Pero, el problema es que la entidad final devuelta es una Colección sin importar qué, ya que se devuelve usando la función __call del Builder. Pero, la entidad deseada es un Array .

Editar: el código que usé para el método 3

 <?php namespace Providers; use Illuminate\Database\Query\Builder; use Illuminate\Support\ServiceProvider; class ListsWorkAround extends ServiceProvider { /** * {@inheritdoc} */ public function register() { Builder::macro("lists", function ($column) { return $this->pluck($column)->toArray(); }); } }

Pero, como dije, esto aún devolvería Collection.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Entonces, esto es lo que terminé haciendo para que funcione, es decir lists() en Model::XXX->lists()

Se agregó esto en ..../config/app.php

 'providers' => [ ... ... \App\Providers\ListsWorkAround::class, ],

y este es el archivo de clase de proveedor.

ListsWorkAround.php

 <?php /** * Created by PhpStorm. * User: ateeq-ahmed * Date: 14/4/17 * Time: 11:25 AM */ namespace App\Providers; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Support\ServiceProvider; class ListsWorkAround extends ServiceProvider { /** * {@inheritdoc} */ public function register() { Builder::macro("lists", function ($column, $key = null) { return $this->pluck($column, $key)->all(); }); QueryBuilder::macro("lists", function ($column, $key = null) { return $this->pluck($column, $key)->all(); }); } }
about 4 years ago · Santiago Trujillo Report

0

Si realmente quisiera, podría incluir lists de macros en Query Builder, Eloquent Builder y Collection

Generador de consultas de macros:

 Illuminate\Database\Query\Builder::macro('lists', function ($column, $key = null) { return $this->pluck($column, $key)->all(); }); DB::table('users')->lists('email');
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!