如何在 Laravel 6 中执行带有多个参数的存储过程以 rest API

How to exec store procedure with many parameter to restAPI in Laravel 6

我有2个应用程序,1个是前端,另外1个是webapi服务器。

在 webapi 中,我必须在 mssql 服务器上执行存储过程。该 SP 有 52 个输入参数。 我想在我的 API 控制器中调用该 SP。 我的问题是如何将这 52 个参数从我的前端传递到我的 API 服务器。 我在 Postman 中使用静态参数成功测试。

前端是 Laravel 5.8,我的 API 服务器是 Laravel 6.2

这是我的 API 控制器,仍然带有静态参数,我想从我的前端

作为数组“$allmyparams”(如果可能)获取这些参数
    public function as_add_reg($allmyparams)
{

    //these are static params for testing purpose
    $param1 = "ID02007160013";
    $param2 = "2020-07-17 00:00:00";
    $param3 = "00-00-77-32";
    $param4 = '00128'; 
    $param5 =  '02        '; 
    $param6 =  '11:27'; 
    $param7 = '06        '; 
    $param8 = '          '; 
    $param9 = 'DESY ARIANA'; 
    $param10 = ''; 
    $param11 = 'RAYA KRONJO '; 
    $param12 = 'TANGERANG'; 
    $param13 = '     '; 
    $param14 = '     '; 
    $param15 = '               '; 
    $param16 = '               '; 
    $param17 = '          '; 
    $param18 = 'TANGERANG                     '; 
    $param19 = '002       '; 
    $param20 = 'P'; 
    $param21 = '                              '; 
    $param22 = '1978-02-03 00:00:00'; 
    $param23 = 'none      '; 
    $param24 = '               '; 
    $param25 = '00002     '; 
    $param26 = '[=11=].0000'; 
    $param27 = '                         '; 
    $param28 = '                                                  '; 
    $param29 = 'none      '; 
    $param30 =  0; 
    $param31 = 42; 
    $param32 =  5; 
    $param33 =  13; 
    $param34 =  '2020-07-16 11:28:44.920'; 
    $param35 =  'mssql'; 
    $param36 =  0; 
    $param37 =  '               '; 
    $param38 =  '                         '; 
    $param39 =  '2020-07-16 00:00:00'; 
    $param40 =  'none      '; 
    $param41 = ''; 
    $param42 =  ''; 
    $param43 = '          '; 
    $param44 = 'none      '; 
    $param45 =  ''; 
    $param46 =  ''; 
    $param47 =  'none      '; 
    $param48 =  'none      '; 
    $param49 =  'none      '; 
    $param50 =  0; 
    $param51 =  0; 
    $param52 = '1';

    $referral_registers = DB::connection('as_api')
        ->select('EXEC reg_Insert ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', 
        array($param1, $param2, $param3, $param4, $param5, $param6, $param7, $param8, $param9, $param10,
         $param11, $param12, $param13, $param14, $param15, $param16, $param17, $param18, $param19, $param20,
         $param21, $param22, $param23, $param24, $param25, $param26, $param27, $param28, $param29, $param30, 
         $param31, $param32, $param33, $param34, $param35, $param36, $param37, $param38, $param39, $param40, 
         $param41, $param42, $param43, $param44, $param45, $param46, $param47, $param48, $param49, $param50, 
         $param51, $param52));

    return response()->json([
        'success' => true,
        'data' => $referral_registers
    ]);
}

并且在前端,这里是调用 webAPI server

的函数
            $allmyparam=arrray(
               "param1"=>1',
               "param2"=>"example",
               ...  
               "param52"=>"example",
            );

            $response2 = $client->get($webapi_url . '/api/heru/as_add_reg/' . $allmyparams, [
                'cookies' => $cookieJar,
                'headers' => [
                    'Authorization' => 'Bearer ' . $webapi_token,
                    'Accept' => 'application/json',
                ],
            ]);

不争论你分享的解决方案,在这里。

我想你正在寻找:

  public function controller_method(Request $request) {
     $request->all();
  }

参见:https://laravel.com/docs/7.x/requests 要获得有关如何处理请求输入的更详细说明

或者..如果你有一个只有值的平面数组,并且想把它作为包含键和值的数组

您可以使用 laravel mapWithKeys

的集合助手

参见:https://laravel.com/docs/7.x/collections#method-mapwithkeys

根据你的评论,我想你没有明白我的意思..

$param1 = "ID02007160013";
$param2 = "2020-07-17 00:00:00";
$param3 = "00-00-77-32";
// ... and so on

//could be done as
$params[] = "val1"
$params[] = "val2"

// Then for example you can access it as an array
//Just like accessing $params

//If you need it as separate values, on a function argument, you could use //the spread operator like

...$params 

参见:https://laravel-news.com/spread-operator-in-array-expressions-coming-to-php-7-4

举一些例子..(只有当你有最新的 PHP 版本时才有效)

然后如果你想把它转换成关联数组


foreach ($params as $index => $param) {
 $newArray["param${index}"] = $param;
}

您也可以使用 https://laravel.com/docs/7.x/collections 这些的帮助方法,但是猜猜,这些对你来说现在更难理解。

.. 将其作为查询参数发送

$client->request('GET', 'http://httpbin.org', [
    'query' => ['foo' => 'bar']
]);

参见:http://docs.guzzlephp.org/en/stable/quickstart.html#query-string-parameters

如果您坚持将其作为字符串,您也可以使用本机 php 函数:https://www.php.net/manual/en/function.http-build-query.php