You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Backpack for Laravel的数据表中加载自定义数据?

用自定义数据生成Backpack for Laravel风格的数据表

这里提供两种实用方案,完全贴合你要的CRUD列表样式,支持Query Builder或数组数据源,还能保留操作按钮:

方案一:基于自定义CRUD控制器(推荐)

Backpack允许创建不绑定Eloquent模型的CRUD,直接对接自定义数据源:

  1. 生成自定义控制器
php artisan make:controller Admin/CustomDataCrudController
  1. 配置控制器逻辑
    在控制器里跳过模型绑定,直接设置数据源和列配置:
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use Illuminate\Support\Facades\DB;

class CustomDataCrudController extends CrudController
{
    // 只启用列表操作,按需添加其他操作
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;

    public function setup()
    {
        CRUD::setModel(false); // 告知Backpack无需关联模型
        CRUD::setRoute(config('backpack.base.route_prefix') . '/custom-data');
        CRUD::setEntityNameStrings('自定义数据', '自定义数据列表');

        // 方式1:用Query Builder作为数据源
        $customQuery = DB::table('table_a')
            ->select('table_a.id', 'table_a.title', 'table_b.content')
            ->leftJoin('table_b', 'table_a.id', '=', 'table_b.a_id');
        CRUD::setDataSource($customQuery);

        // 方式2:用数组作为数据源
        // $customData = [
        //     ['id' => 1, 'title' => '测试项1', 'content' => '内容1'],
        //     ['id' => 2, 'title' => '测试项2', 'content' => '内容2'],
        // ];
        // CRUD::setDataSource($customData);

        // 定义列表列,和普通CRUD完全一致
        CRUD::column('id')->label('ID');
        CRUD::column('title')->label('标题');
        CRUD::column('content')->label('内容');

        // 添加操作按钮,和CRUD列表样式统一
        CRUD::addButtonFromView('line', 'edit', 'custom_edit_btn', 'end');
        CRUD::addButtonFromView('line', 'delete', 'custom_delete_btn', 'end');
    }
}
  1. 自定义操作按钮视图
    创建按钮视图文件,比如resources/views/vendor/backpack/crud/buttons/custom_edit_btn.blade.php:
<a href="{{ backpack_url('custom-data/'.$entry->id.'/edit') }}" class="btn btn-sm btn-link"><i class="la la-edit"></i> 编辑</a>

删除按钮视图同理,根据你的业务逻辑处理请求即可。

  1. 注册路由
    在routes/backpack/custom.php中添加路由:
Route::crud('custom-data', 'Admin\CustomDataCrudController');

方案二:直接在视图渲染数据表

如果不想用CRUD控制器,也可以手动调用Backpack的样式和组件:

  1. 控制器中获取数据
public function showCustomData()
{
    $data = DB::table('table_a')
        ->select('id', 'title', 'content')
        ->get();

    // 或直接用数组
    // $data = [['id' => 1, 'title' => '测试1', ...], ...];

    return view('admin.custom_data', compact('data'));
}
  1. 视图中渲染样式统一的数据表
@extends('backpack::layout')

@section('content')
<div class="card">
    <div class="card-header">
        <h3 class="card-title">自定义数据列表</h3>
    </div>
    <div class="card-body">
        <table class="table table-striped table-hover datatable">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>标题</th>
                    <th>内容</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                @foreach($data as $item)
                <tr>
                    <td>{{ $item->id }}</td>
                    <td>{{ $item->title }}</td>
                    <td>{{ $item->content }}</td>
                    <td>
                        <a href="{{ backpack_url('custom-data/'.$item->id.'/edit') }}" class="btn btn-sm btn-link"><i class="la la-edit"></i> 编辑</a>
                        <a href="{{ backpack_url('custom-data/'.$item->id.'/delete') }}" class="btn btn-sm btn-link text-danger" onclick="return confirm('确定删除吗?')"><i class="la la-trash"></i> 删除</a>
                    </td>
                </tr>
                @endforeach
            </tbody>
        </table>
    </div>
</div>

<!-- 引入Backpack的DataTable脚本,保持分页、排序功能一致 -->
@push('after_scripts')
<script>
    $('.datatable').DataTable({
        responsive: true,
        order: [[0, 'asc']],
        pageLength: 10,
        language: {
            url: '{{ asset('vendor/backpack/datatables/lang/'.app()->getLocale().'.json') }}'
        }
    });
</script>
@endpush
@endsection

内容的提问来源于stack exchange,提问作者Max13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:40:08