字段排除功能
背景:使用过 THINKPHP 的 PHPer 都知道有字段排除功能,个人觉得有时候还是比较好用的,所以分享一下!第一次分享,如有不好之处,请大神指教
这里面主要是使用到 laravel 里面的 Macros;
1、在 app\Providers 里面新建一个 QueryMacroServiceProvider 的类
温馨提示:这里面有一个小坑,
\Illuminate\Database\Query\Builder 适合用于DB,Illuminate\Database\Eloquent\Builder 适合用于ORM
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\ServiceProvider;
class QueryMacroServiceProvider extends ServiceProvider
{
public function boot()
{
Builder::macro('selectNotField', function ($columns = ['*']) {
$columns = is_array($columns) ? $columns : func_get_args();
$filed = array_diff($this->model->getFillable(), $columns);
return $this->select($filed);
});
}
}
2、 config 里面的 app.php 文件,在providers 进行注册
'providers' => [
......
App\Providers\QueryMacroServiceProvider::class,
3、使用selectNotFiled查询
$result = self::selectNotField('status','name')->get();
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
到底是排序还是排除呢 :joy:
真需要
('status,name')类似这样的效果,自己封装一个函数,将字符串转成数组就好了,->select(str_to_array('status,name'))->简单用
$hidden?https://learnku.com/docs/laravel/5.8/eloquent-seri...
Non-static method Illuminate\Database\Eloquent\Builder::macro() should not be called statically, assuming $this from incompatible context 我的这个说不能调用这个方法这个是什么问题?
我的是5.3版本的是版本的问题吗?
如果未设置 fillable , 是否会获取不到字段呢 ?
改进了一下