Eloquent ORM 無疑是非常強大的,為開發者提供了許多好用的查詢構造器。有時候,現有的查詢構造器不能滿足我們的要求時,我們也可以自定義。
模型層父類繼承 Eloquent Model ,在構造方法中利用 macro 註冊自定義的 builder。示例程式碼如下:
class Model extends \Illuminate\Database\Eloquent\Model
{
public function __construct(array $attributes = [])
{
/**
* 自定義 builder
*/
/**
* page() 方法
* 引數: $page 頁數 ;$limit 每頁展示多少條
* 使用方法:query鏈式呼叫
*/
\Illuminate\Database\Query\Builder::macro('page', function ($page, $limit) {
return $this->limit($limit)->offset(($page - 1) * $limit);
});
parent::__construct($attributes);
}
}
Users 模型繼承自 Model,在控制器中使用如下示例。
class UsersController extends Controller
{
public function index()
{
// TODO:接收引數 $page 和 $limit
$result = [
'list' => Users::query()->with('XXX')->page($page, $limit)->get(),
'total' => Users::select('id')->count(),
];
return json(200, $result);
}
}
finished!
PS:其實文中自定義的 page() ,與 Eloquent Model 中自帶方法 perPage() 功能一致,所以自定義 page() 方法僅作示例使用。
本作品採用《CC 協議》,轉載必須註明作者和本文連結