laravel - 数据库 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。
我希望从数据库中获得相同的记录值。
解决方案
默认情况下,Laravel 假设键是自动递增的整数。因此,当您尝试访问它时,它会自动将密钥转换为整数。
要解决此问题,您应该更新模型上的$incrementing
和$keyType
字段:
protected $keyType = 'string';
public $incrementing = false;
大多数情况下,这两个值是结合使用的,但也有单独使用它们的地方,因此最好适当地设置两者。
推荐阅读
- reactjs - 反应渲染状态不是真实状态
- python - 使用 python、Airflow 将字节插入 Oracle 表
- javascript - 如何用鼠标位置选择标签名称?
- javascript - highCharts 范围选择器日期格式有问题吗?
- c# - 如何在 blazor 中手动渲染父组件的剃刀代码?
- electron - 使用 Electron 在 Angular 中使用 Google reCaptcha
- sql - 试图在 Microstrategy 中执行此逻辑
- python - 如何使用导入的方法在 python 中初始化默认值?
- php - 如何将网址从具有空白服务器的网站重定向到另一个网站
- c++11 - 隐式声明的析构函数