首页 > 解决方案 > 我使用“表字段/列”作为 varchar 类型而不是整数类型。但为什么要修剪第一个 0(零)?

问题描述

这里,“Phone”是“Employee”表的字段,“Phone”类型是字符串/varchar。

步骤: 1)保存一个“员工”信息,电话=“01679420786”

移民:

public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->string('phone')->primary();
        $table->string('name');
        $table->string('designation');
        $table->timestamps();
    });
}

模型:

class Employee extends Model
{
    protected $primaryKey = 'phone';
}

2)获取 Employee 然后 dd()

public function getEmployee()
{
    $employee = Employee::get();
    dd($employee[0]->phone);
    return view('employee.showEmployeeList')->with('employee', $employee);
}

3)浏览器输出:1679420786

使用 Laravel 框架 6.0.3,PHP 版本:7.3.2

标签: laravelintegertrimvarchar

解决方案


您正在将模型的主键设置为phone。在这种情况下,它是一个字符串。默认情况下,Laravel 期望这是一个整数,因此尝试将值转换为整数。这是0从值的开头删除 。

为了解决这个问题,将以下属性添加到您的模型中。

protected $keyType = 'string';

这告诉 Laravel 主键不是整数,而是一个字符串,所以它会相应地转换它。

您的模型应如下所示:

class Employee extends Model
{
    protected $primaryKey = 'phone';

    protected $keyType = 'string';
}

推荐阅读