首页 > 解决方案 > 数据库 ID 与 Laravel api 不同

问题描述

数据库中的记录与我使用 laravel api 获得的记录不同。

我想获取具有唯一字符串 id 的元素。但我有一个问题。我能够记录元素,但是当我获取它们时,我得到了不同的 id 值。

例如,对于 id 为“5c47b3c858e2a”的产品,我得到一个值为 5 的 id。我尝试直接查询该值,也使用 eloquent。和同样的结果。

迁移

public function up()
{
    Schema::create('warehouses', function (Blueprint $table) {
        $table->string('id')->unique();
        $table->string('name');
        $table->integer('branch_id');
        $table->timestamps();
    });
}

public function getWarehousesOfBranch(Branch $branch) {
    return $branch->warehouses;
}

public function warehouses()
{
    return $this->hasMany('App\Warehouse');
}

public function up()
{
    Schema::create('branches', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->timestamps();
    });
}

getWarehousesOfBranch 是 api 方法,一个简单的 GET。

我希望从数据库中获得相同的记录值。

标签: laraveleloquent

解决方案


默认情况下,Laravel 假设键是自动递增的整数。因此,当您尝试访问它时,它会自动将密钥转换为整数。

要解决此问题,您应该更新模型上的$incrementing$keyType字段:

protected $keyType = 'string';

public $incrementing = false;

大多数情况下,这两个值是结合使用的,但也有单独使用它们的地方,因此最好适当地设置两者。


推荐阅读