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

Laravel Yajra Datatables如何渲染blade模板添加自定义操作列

问题原因

你遇到的这个问题是Yajra Datatables 9.x及以上版本调整了addColumn方法的用法导致的,旧版本支持直接传入视图路径字符串自动渲染,新版本必须手动调用视图渲染方法生成HTML字符串。

解决步骤
  1. 修改Controller中addColumn的写法,使用闭包手动渲染blade模板,代码如下:
public function index()
{
    if(request()->ajax()) {
        return datatables()->of(Company::select('*'))
        ->addColumn('action', function ($company) {
            // 传入当前行的company数据到blade模板,调用render()方法转为HTML字符串
            return view('company-action', compact('company'))->render();
        })
        ->rawColumns(['action'])
        ->addIndexColumn()
        ->make(true);
    }
    return view('company.company-index');
}
  1. 调整company-action.blade.php的变量引用,对应传入的参数:
    如果你在闭包中传的是完整的company实例,把模板里的{{ $id }}改成{{ $company->id }}即可:
<a href="javascript:void(0)" data-toggle="tooltip" onClick="editFunc({{ $company->id }})" data-original-title="Edit" class="edit btn btn-success edit">
Edit
</a>
<a href="javascript:void(0);" id="delete-compnay" onClick="deleteFunc({{ $company->id }})" data-toggle="tooltip" data-original-title="Delete" class="delete btn btn-danger">
Delete
</a>

如果不想修改模板,也可以直接在闭包中传入id参数:

->addColumn('action', function ($company) {
    return view('company-action', ['id' => $company->id])->render();
})
注意事项
  • 确保blade模板的路径正确:如果company-action.blade.php放在resources/views的子目录下,比如resources/views/companies/company-action.blade.php,则视图路径要写为companies.company-action
  • 已经配置的rawColumns(['action'])必须保留,否则模板输出的HTML代码会被自动转义为纯文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:36:11