我知道Laravel删除了lists()函数并将函数签名移动为pluck().但是,对于想要从Laravel 4.x升级到Laravel 5.4的人来说,这会带来很多工作.
因此,我试图找到一种方法来只使用我的代码中的现有函数,即lists(),并在调用此函数时使用pluck() – > toArray().
我尝试了以下内容.
方法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();
}
不会工作!
原因:这需要与BaseModel类一起扩展.但是,它已经扩展了Eloquent Model Class.
方法2
尝试使用trait添加Required函数
listsWorkAround.php
trait listsWorkAround
{
function lists($column){
return $this->pluck($column)->toArray();
}
}
Model.php
namespace App;
use Watson\Rememberable\Rememberable;
use Illuminate\Database\Eloquent\Model as Eloquent;
abstract class Model extends Eloquent
{
use listsWorkAround;
use Rememberable;
}
不是没有成功.
方法3
尝试添加一个ServiceProvider并为Builder类添加一个宏函数,即本例中的列表.
但是,问题是最终返回的实体是一个Collection,无论使用Builder的__call函数返回什么.但是,所需的实体是一个数组.
Edit : The Code I used for Method 3
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();
});
}
}
但是,正如我所说,这仍将归还Collection.