Ate*_*d 4 php laravel eloquent pluck laravel-query-builder
我知道Laravel已删除lists()函数并将函数签名移为的事实pluck()。但是,对于想要从Laravel 4.x升级到Laravel 5.4的人来说,这会导致很多工作。
因此,我试图找到一种方法来仅利用现有函数(即lists()在我的代码中)并且仅利用pluck()->toArray()何时调用此函数。
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();
}
Run Code Online (Sandbox Code Playgroud)
不工作!
原因:这需要与BaseModel类一起扩展。但是,它已经扩展了口才模型类。
尝试使用traitlike 添加Required函数
listingWorkAround.php
<?php
trait listsWorkAround
{
function lists($column){
return $this->pluck($column)->toArray();
}
}
Run Code Online (Sandbox Code Playgroud)
模型.php
<?php
namespace App;
use Watson\Rememberable\Rememberable;
use Illuminate\Database\Eloquent\Model as Eloquent;
abstract class Model extends Eloquent
{
use listsWorkAround;
use Rememberable;
}
Run Code Online (Sandbox Code Playgroud)
不,不是没有成功。
试图添加一个as ServiceProvider并macro为BuilderClass 添加一个函数,lists在这种情况下。
但是,问题是最终返回的实体是一个Collection,无论使用__callBuilder 的函数返回它是什么。但是,所需的实体是Array。
编辑:我用于方法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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,正如我所说,这仍然会返回Collection。
Ate*_*d 5
所以,这是我落得这样做,使其工作,即lists()在Model::XXX->lists()
在.... / config / app.php中添加了这个
'providers' => [
...
...
\App\Providers\ListsWorkAround::class,
],
Run Code Online (Sandbox Code Playgroud)
这是提供商类文件。
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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6885 次 |
| 最近记录: |