[擴充套件包] Laravel-eloquent-filter 減少你對篩選條件搜尋 where 的煩惱

vinhson發表於2020-06-11

在我們日常程式碼開發中,最常見的功能就是列表篩選了。通過不同的引數,返回符合條件的內容。

在網上也看到不少各種包,寫法大同小異,感覺比較繁瑣,於是自己寫了一個。

下面分享一個擴充套件包。

composer require james.xue/laravel-eloquent-filter

TestFilter

搜尋預設資料庫欄位
    public function code($code)
    {
        return $this->builder->where('code', $code);
    }

    public function name()
    {
        $this->builder->where('name', 'like', "%測試%");
    }

    public function mobile($mobile)
    {
        $mobile ? $this->builder->where('mobile', $mobile) : $this->builder;
    }

 一對多
    public function title($title)
    {
        return $this->builder->whereHas('goods', function($q) use ($title){
            return $q->where('title', 'like', "%{$title}%");
        });
    }

Controller、通過 url 篩選條件預設方法可以不寫,預設搜尋條件為 where($column, $keywords)

// http://baby.com/api/city?code=54526481&title=菁華粉底液(片裝1.5mll)

public function index(TestFilter $testfilter)
{
    Test::filter($testfilter)->get(); 
    // Or $testfilter 可以省略,預設載入 `模型 + Filter`
    Test::filter()->get(); 

    // 支援固定篩選
    Test::filter($testfilter, 'name')->get();
    // Or
    Test::filter($testfilter, ['name'])->get();

    // 支援固定篩選帶引數
    $mobile = "185513215";
    Test::filter($testfilter, ['mobile:'.$mobile])->get();

    // 支援自定義篩選方式,example:<>、like等
    $mobile = "185513215";
    Test::filter($testfilter, ['mobile:'.$mobile."|<>"])->get();
}

擴充套件包肯定還有不足之處,最後歡迎各位 PR 以帶來更好的功能

GitHub:github.com/xiaoxuan6/laravel-eloqu...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

不要輕易放棄。學習成長的路上,我們長路漫漫,只因學無止境

Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.

相關文章