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();
});
}
}