如何在 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
我有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