laravel-admin 是一个可以快速帮你构建后台管理的工具,它提供的页面组件和表单元素等功能,能帮助你使用很少的代码就实现功能完善的后台管理功能。
官方开发文档:Laravel admin | 表格数据源
最近遇到一个项目需求,需要将union的数据进行列表化展示在后台;
后台基于Laravel-Admin扩展来实现的,由于model-grid的数据是依赖Eloquent model来查询获取;
也就是说Encore\Admin\Grid被new的时候传入的参数1必须是个Eloquent model实例;
但对于union数据来说并非一张实例Model;
通过建立视图表,建立视图Model进行引用实现表格数据源的接入;
namespace App\Admin\Controllers\Test;
use App\Http\Controllers\Controller;
use Encore\Admin\Grid;
use App\Models\View\UnionViewModels AS mUnionView;
class TestController extends Controller
{
// ....
protected function grid()
{
$grid = new Grid(new mUnionView());
}
// ....
通过Grid的model()来改变数据源
namespace App\Admin\Controllers\Test;
use App\Http\Controllers\Controller;
use Encore\Admin\Grid;
use Illuminate\Support\Facades\DB;
use App\Models\UnionDataModels AS mUnionData;
class TestController extends Controller
{
// ....
protected function grid()
{
// 这里的Models可能是个空模型
$grid = new Grid(new mUnionData());
// 这里来改变源空模型的表(相当于建立了个虚拟表)
$grid->model()->setTable(DB::raw('('.mUnionData::getUnionsSql().') AS T'));
// 剩下的操作与官方手册中一致,没有其他变化
}
// ....