You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中数据库13位数字字段按指定规则加空格存储的实现问题

Laravel 13位数字格式化存储实现方案

1. 数据库字段适配

对应存储字段建议设置为varchar(16),13位数字加3个空格总长度为16,预留足够存储空间。

2. 新增模型修改器自动格式化

Laravel的Eloquent修改器可以在字段赋值时自动处理格式,无需每次手动调用格式化逻辑,示例代码如下(假设模型名为Record,存储字段为number_code):

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Record extends Model
{
    // 新增修改器,赋值时自动格式化数字
    public function setNumberCodeAttribute($value)
    {
        // 先过滤输入内的所有非数字字符,兼容用户带符号/空格的输入场景
        $pureNumber = preg_replace('/\D/', '', $value);
        
        // 校验数字长度是否符合13位要求
        if (strlen($pureNumber) !== 13) {
            throw new \InvalidArgumentException('输入内容必须为13位数字');
        }
        
        // 拆分前9位和最后4位
        $prefixPart = substr($pureNumber, 0, 9);
        $suffixPart = substr($pureNumber, -4);
        
        // 前9位每3位加空格拼接
        $formattedPrefix = implode(' ', str_split($prefixPart, 3));
        
        // 赋值到属性,最终存储格式符合要求
        $this->attributes['number_code'] = $formattedPrefix . ' ' . $suffixPart;
    }
}

使用时直接给字段赋纯数字值即可,系统会自动处理格式化:

$record = new Record();
$record->number_code = '1234567891234';
$record->save();
// 最终存储的number_code值为 123 456 789 1234

3. 可选:添加验证规则提前拦截异常输入

在表单请求或控制器中添加验证规则,提前校验输入合法性:

$validated = $request->validate([
    'number_code' => 'required|digits:13',
]);

digits:13规则会自动校验输入是否为13位纯数字,避免无效数据进入后续逻辑。

4. 可选:新增访问器快速获取纯数字值

如果后续业务需要使用不带空格的纯数字,可在模型中添加访问器:

public function getRawNumberCodeAttribute()
{
    return preg_replace('/\D/', '', $this->attributes['number_code']);
}

调用时直接读取属性即可获取纯数字:$record->raw_number_code。


内容的提问来源于stack exchange,提问作者Arthur Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:36:05