将变量传递给另一个 Laravel 函数

时间:2021-07-20 20:20:41

标签: php laravel variables datatables

您好,我正在使用 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>';
            })

变量将与获救的变量保持这种方式。

目前,如果我输入变量,他们会告诉我它们不存在,因为我认为它们处于不同的功能中。

如何使这些变量成为全局变量?

3 个答案:

答案 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(....)