合并 Laravel 数组请求上的新值



如果我的所有输入值都$request->input('users')如何合并新值?

像这样:

$request->merge(['users.dob' => '2000']);

但显而易见是行不通的。

首先,我们需要获取属于该数组的所有项目并暂时保存。

例如

$users = $request->users;

这样,您可以访问用户的数据,例如 $users['name']$users['surname'] .

接下来,更新或添加您需要的任何数据。例如,像这样:

$users['dob']  = "2000";
$users['name'] = ucwords($request->users['name']);
...

完成后,我们将临时数组合并回$request,如下所示:

$request->merge(['users' => $users]);

试试这个:

$originalInput = $request->input('users');
$defaultValue = [
    'dob' => 2000
];
$mergedResult = array_merge($defaultValue, $originalInput);
$request->merge([
    'users' => $mergedResult
]);

如果您正在寻找更优雅的东西(阅读:困难的方式(并提高代码的可重用性,您可以按照以下步骤操作:

  1. 创建一个服务提供程序,这里我们注册一个宏来Request对象。
php artisan make:provider RegisterMergeInputRequestMacro
  1. 写下您的提供商
<?php
namespace AppProviders;
use IlluminateHttpRequest;
use IlluminateSupportServiceProvider;
class RegisterMergeInputRequestMacro extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        Request::macro('mergeInput', function (string $name, array $defaultValue) {
            $this->merge([
                $name => array_merge($defaultValue, $this->input($name))
            ]);
        });
    }
}
  1. config/app.php文件中注册ServiceProvider
return [
    ...
    'providers' => [
      ...
      AppProvidersRegisterMergeInputRequestMacro::class,
      ...
    ],
    ...
];
  1. 像老板一样使用它:
$request->mergeInput('users', [
    'dob' => 2000
]);

试试这个:

$request->request->add(['users.dob', '2000']);

似乎merge()不再起作用了。

试试这个:

$data= $request->input('users');
$data['dob'] = 2000;
你可以

试试这个

public function __construct(IlluminateHttpRequest $request)
{
    $request->request->add(
   ['date_of_birth' => implode('-',$request->only('year', 'month', 'day'))]);
 }

试试这个:

$request->request->add([
      'new-field1' => 'value 1', 
      'new-field2' => 'value 2'
    ]);
这是我

迄今为止得出的最佳解决方案。假设您要从请求修改cover_image名称。

  1. 将所有表单请求存储在变量中

    $requestData = $request->all();
    
  2. 像这样修改数组

    $requestData->cover_image = "your new image name";
    
  3. 保存您的数据

    $requestData->save();
    

如果你把它做成一个数组,它就会起作用。

$request->merge([
    'users' => [
        'dob' => '2000'
    ],
]);

最新更新