首页 > 解决方案 > 如何获取 id 以在控制器 laravel 中的另一个函数中使用

问题描述

我正在尝试在我的控制器中使用我的 show 函数中的 id,

我的控制器可以正常使用这个 $id

    public function show($id)
{
    $DigestReport = Meo::find($id);
    return view('digest-report.show', ['DigestReport' => $DigestReport]);
}

我正在尝试将相同的 $id 用于另一个功能

    public function getMailRecipients($id){
    $meoId = Meo::find(id);
    $mailRecipients = $this->meoRepository->getMailRecipients($meoId);
    return DataTables::of($mailRecipients)->make();

}

但我收到以下错误

函数 DigestReportController::getMailRecipients() 的参数太少,第 54 行传递了 0,而预期的正好是 1

我该如何解决?

补充:如有必要,这是我的存储库

public function getMailRecipients($meoId){
    return DB::table('mail_recipients')->where('meo_id', '=', $meoId)->select('id', 'name', 'email')->get();

我的 api.php 我存储的路线在哪里

Route::get('/digest-report/mail-recipients', 'DigestReportController@getMailRecipients')->name('digest-report.mail-recipients');

我使用此控制器的视图是用于制作数据表

$(document).ready(function () {
            $('#mail-recipient-table').DataTable({
                "processing": true,
                "serverSide": true,
                "ajax": '{{route('digest-report.mail-recipients')}}',
                "columns": [{data:'id'},{data: 'name'},{data: 'email'}]
            });
        })

谢谢

标签: laravelcontroller

解决方案


好的,你有两种方法可以做到这一点

  1. 在你的web.php你将更新你的路线是
Route::get('/digest-report/mail-recipients/{id}', 'DigestReportController@getMailRecipients')->name('digest-report.mail-recipients');

那么你的javascript代码将是

$(document).ready(function () {
    $('#mail-recipient-table').DataTable({
         "processing": true,
          "serverSide": true,
          "ajax": '{{route('digest-report.mail-recipients', $DigestReport->id)}}',
          "columns": [{data:'id'},{data: 'name'},{data: 'email'}]
    });
})
  1. 在您的控制器中,您将更新getMailRecipients
public function getMailRecipients(Request $request){
    $meoId = Meo::find($request->id); // or using helper request('id') function
    $mailRecipients = $this->meoRepository->getMailRecipients($meoId);
    return DataTables::of($mailRecipients)->make();
}

你的javascript代码将是相同的


推荐阅读