Php Laravel 5.4中查询生成器中的Add lists()方法

Php Laravel 5.4中查询生成器中的Add lists()方法,php,laravel,eloquent,laravel-query-builder,pluck,Php,Laravel,Eloquent,Laravel Query Builder,Pluck,我知道Laravel删除了lists()函数,并将函数签名移动为pluck()。但是,对于那些想要从Laravel4.x升级到Laravel5.4的人来说,这需要做很多工作 因此,我试图找到一种方法,在我的代码中只使用现有函数,即lists(),在调用此函数时只使用pulk()->toArray() 我尝试了以下方法。 方法1 不行 原因:这需要与BaseModel类一起扩展。但是,它已经扩展了雄辩的模型类 方法2 尝试使用traitlike添加所需的函数 listsWorkAround.php


我知道Laravel删除了
lists()
函数,并将函数签名移动为
pluck()
。但是,对于那些想要从Laravel4.x升级到Laravel5.4的人来说,这需要做很多工作

因此,我试图找到一种方法,在我的代码中只使用现有函数,即
lists()
,在调用此函数时只使用
pulk()->toArray()


我尝试了以下方法。 方法1 不行
原因:这需要与BaseModel类一起扩展。但是,它已经扩展了雄辩的模型类

方法2 尝试使用
trait
like添加所需的函数

listsWorkAround.php


但是,正如我所说,这仍然会返回集合。

如果您真的想,您可以将
列表宏到查询生成器、雄辩生成器和集合中

宏正在生成查询生成器:

Illuminate\Database\Query\Builder::macro('lists', function ($column, $key = null) {
    return $this->pluck($column, $key)->all(); 
});


DB::table('users')->lists('email');

所以,这就是我最后要做的事情,就是在
Model::XXX->lists()

…/config/app.php中添加了这个

这是提供程序类文件

ListsWorkAround.php


您能否复制原始的lists方法并将其添加到您自己的trait中?您能否显示您尝试的方法3的代码?@patricus请查看代码。谢谢,谢谢!。。这管用!但是,我仍然不想改变
Model::XXX->list()
DB::table()->XX->lists()
。因此,我将
添加到了Eloquent中,它似乎起到了作用。发布我尝试的答案。我没有创建新的服务提供商,而是将其添加到
AppServiceProvider
,效果很好。
<?php
trait listsWorkAround
{ 
  function lists($column){
    return $this->pluck($column)->toArray();
  }
}
<?php
namespace App;

use Watson\Rememberable\Rememberable;
use Illuminate\Database\Eloquent\Model as Eloquent;

abstract class Model extends Eloquent
{
    use listsWorkAround;
    use Rememberable;
}
<?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();
        });
    }
}
Illuminate\Database\Query\Builder::macro('lists', function ($column, $key = null) {
    return $this->pluck($column, $key)->all(); 
});


DB::table('users')->lists('email');
'providers' => [
 ...
 ...
 \App\Providers\ListsWorkAround::class,
],
<?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();
        });
    }
}