微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在Laravel 5.4中的Query Builder中添加lists()方法

我知道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

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

Model.PHP

<?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

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

但是,正如我所说,这仍将归还Collection.

解决方法:

所以,这就是我最终做的工作,即Model :: XXX-> lists()中的lists()

Added this in …./config/app.PHP

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

这是提供者类文件.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐