Laravel关于请求参数空字符串转null问题

前端那边说字段值为空字符串怎么获取变成null,这边奇了怪了,接口都开发一年多了,怎么今天反馈这个问题,这边也没加其它操作,然后这边查找了一下,发现App\HttpKernel.php中存在一个转null的中间件ConvertEmptyStringsToNull, 其实这个中间件处理的流程和咱们上次提的《Laravel关于TrimStrings请求参数去空格问题》去空格很几乎是一样的处理办法。

这边刚开始是从网上查找了有没有好一些的解决方法,尽量不为了一个接口删去这个全局中间件,从网上找的解决方法也都是说把这个中间件移出,还有看到withoutMiddleware,但是官网上说不支持作用全局中间件,然后这边就看了下方法的源码,发现主要是transform()方法处理,一看就和上次去空格一样,所以这边就重写了一下这个方法,然后再kernel.php替换下中间件

<?php

namespace App\Http\Middleware;

use \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull as ConvertEmptyStringsToNullMiddleware;

class ConvertEmptyStringsToNull extends ConvertEmptyStringsToNullMiddleware
{

    /**
     * 重写空字符串转null方法,$key和$value分别是请求参数的键和值,如果是对象的话则用.进行分级
     * @param  string  $key
     * @param  mixed  $value
     * @return mixed
     */
    protected function transform($key, $value)
    {

        // 这里的作用是全局不进行 my-data 中空字符串转null操作,如果my-data不是对象,则为my-data;如果my-data是对象,则为my-data.加上.
        if(strpos($key,'my-data.') !== false) {

            return $value;

        }

        return is_string($value) && $value === '' ? null : $value;

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MySQL中,字符串可以被存储为一个值,也可以是一个缺少值。当我们查询包含字符串的列时,需要将它们换为 NULL 值以进行比较或处理。以下是在 MySQL 查询中将字符串换为 NULL 值的方法: 在 SELECT 语句中使用 IF 函数 可以使用 MySQL 的 IF 函数来将字符串换为 NULL 值。如下所示,将使用 IF 函数在 SELECT 语句中将字符串换为 NULL: SELECT IF(col_name = '', NULL, col_name) FROM table_name; 上面的查询将会在 col_name 列包含字符串时返回 NULL,而在 col_name 列包含非字符时返回 col_name 字符串的值。 在 UPDATE 语句中使用 NULLIF 函数 可以使用 MySQL 的 NULLIF 函数将字符串换为 NULL 值。如下所示,将使用 NULLIF 函数在 UPDATE 语句中将字符串换为 NULL: UPDATE table_name SET col_name = NULLIF(col_name, ''); 上述 UPDATE 语句将在 col_name 列包含字符串时将其替换为 NULL 值。 使用 TRIM 函数将字符串替换为 NULL 还可以使用 MySQL 的 TRIM 函数来将字符串替换为 NULL 值。如下所示,将使用 TRIM 函数在 UPDATE 语句中将字符串换为 NULL: UPDATE table_name SET col_name = NULL WHERE TRIM(col_name) = ''; 上述 UPDATE 语句将在 col_name 列包含字符串时将其替换为 NULL 值。 总之,在 MySQL 中,将字符串换为 NULL 可以使用 IF 函数、NULLIF 函数或 TRIM 函数。这些函数可以用于 SELECT 或 UPDATE 语句中。如果您需要在查询中使用 NULL 值而不是字符串,则可以使用这些函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值