mysql怎么给表数据导入空值_mysql表默认null 但是传入空值 laravel怎么处理是正确姿势?...

有两种方法供你选择:

使用Laravel集合的 map 方法。该方法适用于单个表单。

使用中间件。该方法适用于有多个表单

单个表单

可以使用集合的map方法进行过滤,然后使用得到的 $params 进行操作。

public function post(Request $request)

{

// 过滤空值,并且trim

$params = collect($request)->map(function ($item) {

if (is_string($item)) {

$item = empty(trim($item)) ? null : trim($item);

}

return $item;

});

// 现在表单的内容在 $params 中了,并且去掉了空值

}

关于里面函数的具体意义请参考官方文档。

多个表单

首先推荐看一下官方文档。

其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。

先用 php artisan make:middleware RejectEmptyValues 命令创建一个中间件。

此命令将会在 app/Http/Middleware 目录内设定一个名称为 RejectEmptyValues 的类。

修改 RejectEmptyValues 的代码

namespace App\Http\Middleware;

use Closure;

class RejectEmptyValues

{

/**

* Handle an incoming request.

*

* @param \Illuminate\Http\Request $request

* @param \Closure $next

* @return mixed

*/

public function handle($request, Closure $next)

{

// 过滤空值,并且trim

$params = collect($request)->map(function ($item) {

if (is_string($item)) {

$item = empty(trim($item)) ? null : trim($item);

}

return $item;

});

$request->replace($params->all());

return $next($request);

}

}

注册中间件,在 app/Http/Kernel.php 文件的 $routeMiddleware 中加入一行

'reject_empty_values' => \App\Http\Middleware\RejectEmptyValues::class,

使用中间件示例,

Route::post('/test','TestController@post')->middleware('reject_empty_values');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值