您好,我正在使用 laravel Yajra 数据表,问题是我在一个函数中创建了 2 个变量,其名称为 id。
这是全部代码
<?php
namespace App\Http\Controllers\Datatables;
use App\User;
use Carbon\Carbon;
use Yajra\DataTables\DataTables;
use App\Reportes;
class ReportesDatatable
{
public function ReportesDatatable()
{
$reportes = Reportes::get();
return Datatables::of($reportes)
->editColumn('reportante', function ($reportes) {
$reportante = User::find($reportes->reportante);
return $reportante->name;
})
->editColumn('user_id_afectado', function ($reportes) {
$nameafectado = User::find($reportes->user_id_afectado);
return $nameafectado->name;
})
->editColumn('created_at', function ($reportes) {
return '<span data-popup="tooltip" data-placement="left" title="' . $reportes->timestamp . '">' . $reportes->timestamp . '</span>';
})
->addColumn('action', function ($reportes) {
return '<div class="btn-group btn-group-justified"> <a href="' . route('admin.get.editUser', $reportes->reportante) . '" class="btn btn-sm btn-secondary mr-2"> Ver Reportante</a> <a href="' . route('admin.get.editUser', $reportes->user_id_afectado) . '" class="btn btn-sm btn-primary mr-2">Afectado</a> <a href="' . route('admin.impersonate', $reportes->user_id_afectado) . '" data-popup="tooltip" data-placement="left" title="Logear como Afectado ' . $reportes->user_id_afectado . '" class="btn btn-sm btn-warning"> <i class="icon-circle-right2 text-white"></i></a></div>';
})
->rawColumns(['role', 'action', 'created_at'])
->make(true);
}
}
我需要拯救的变量是这些。 我这样做是为了不再再次查询数据库。我认为什么是最理想的?
1.- $reportante = User::find($reportes->reportante);
2.- $nameafectado = User::find($reportes->user_id_afectado);
我需要拯救这两个变量并将它们放入函数中
->addColumn('action', function ($reportes) {
return '<div class="btn-group btn-group-justified"> <a href="' . route('admin.get.editUser', $reportante) . '" class="btn btn-sm btn-secondary mr-2"> Ver Reportante</a> <a href="' . route('admin.get.editUser', $nameafectado) . '" class="btn btn-sm btn-primary mr-2">Afectado</a> <a href="' . route('admin.impersonate', $reportes->user_id_afectado) . '" data-popup="tooltip" data-placement="left" title="Logear como Afectado ' . $nameafectado . '" class="btn btn-sm btn-warning"> <i class="icon-circle-right2 text-white"></i></a></div>';
})
变量将与获救的变量保持这种方式。
目前,如果我输入变量,他们会告诉我它们不存在,因为我认为它们处于不同的功能中。
如何使这些变量成为全局变量?
答案 0 :(得分:2)
在函数闭包中,函数上下文中无法访问任何外部变量,您可以包含 use
关键字(从父作用域继承变量,请参阅 https://www.php.net/manual/en/functions.anonymous.php#example-158)以在不同的环境中使用这些变量上下文
public function ReportesDatatable()
{
$reportes = Reportes::get();
$reportante = User::find($reportes->reportante);
$nameafectado = User::find($reportes->user_id_afectado);
return Datatables::of($reportes)
->editColumn('reportante', function ($reportes) use ($reportante) {
// $reportante = User::find($reportes->reportante);
return $reportante->name;
})
->editColumn('user_id_afectado', function ($reportes) use ($nameafectado) {
// $nameafectado = User::find($reportes->user_id_afectado);
return $nameafectado->name;
})
....
}
答案 1 :(得分:1)
$reportante = User::find($reportes->reportante);
return Datatables::of($reportes)
->editColumn('reportante', function ($reportes) use ($reportante) {
return $reportante->name;
})
答案 2 :(得分:0)
$reportes
是一个集合 (Reportes::get()
) 那么它应该如何工作:?
->editColumn('reportante', function ($reportes) {
$reportante = User::find($reportes->reportante);
return $reportante->name;
})
假设您已经正确设置了 Reportes
模型的关系(hasOne reportante 和 hasOne afectado(?)),然后执行以下查询:
$reportes = Reportes::with(['reportante', 'afectado'])->get();
和数据表:
return Datatables::of($reportes)
//see? single $report, not all $reportes
->editColumn('reportante', function ($report) {
return $report->reportante->name;
})
->editColumn('user_id_afectado', function ($report) {
return $report->afectado->name;
})
->editColumn(....)