关于模型属性空值插入问题 [ 求助交流 ]
长话短说 假设数据库有字段
a int 11 不允许为null 默认值0
b tinyint 1 不允许为null 默认值0
c smallint 5 不允许为null 默认值0
d varchar 255 不允许未null 默认值 empty string
假设表单提交数据为
[forn]=>[
'a'=>1,'b'=>'','c'=>'12','d'=>''
]
按正常流程,在数据合法的情况下数据库该有一条a-b分别为 1 0 12 0的数据,但是实际上会报错提示某字段不能为null
在这里数据库的默认值就没效果了,取消不为null或模型增加default都可以解决,但是除非是长文本,我都不允许为null,第二种每次都要手动配置default规则也很麻烦,只要提交的数据不参与验证就行了,然后写了个方法过滤掉参数中字符串类型的空值数据,空的字符串类型数据其实也没啥用了吧
代码如下
/**
* 删除数组空值
* @param $arr
* @return array
* @author 竹林风@875384189 2020/4/9 18:41
*/
public static function removeEmptyAttr($arr, $newsArray = [])
{
foreach ($arr as $index => $item) {
if (is_array($item)) {//数组递归
$newsArray[$index] = self::removeEmptyAttr($item);
} else if (gettype($item) === 'string') {
if (mb_strlen($item) === 0 || is_null($item)) {
unset($item);
} else {
$newsArray[$index] = $item;
}
} else {
$newsArray[$index] = $item;
}
}
return $newsArray;
}
这样只要传入的数据内有string类型的数据,且数据长度为0,那么就去掉这个数据,但是还是希望官当在生成SQL时可以过滤掉nul 长度为0的字符串
共 0 条回复
没有找到数据。
竹林风
注册时间:2017-04-06
最后登录:2022-02-15
在线时长:53小时3分
最后登录:2022-02-15
在线时长:53小时3分
- 粉丝4
- 金钱135
- 威望40
- 积分1065