欄位排除功能

蕭風發表於2019-08-23

背景:使用過 THINKPHPPHPer 都知道有欄位排除功能,個人覺得有時候還是比較好用的,所以分享一下!第一次分享,如有不好之處,請大神指教

這裡面主要是使用到 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 協議》,轉載必須註明作者和本文連結

相關文章