laravel-admin模型表格之表格数据源(union联表数据)

鄢雅畅
2023-12-01

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'));
		// 剩下的操作与官方手册中一致,没有其他变化
	}
	// ....
 类似资料: