Laravel 5.8 Eloquent Create() 返回错误的 ID
Posted
技术标签:
【中文标题】Laravel 5.8 Eloquent Create() 返回错误的 ID【英文标题】:Laravel 5.8 Eloquent Create() return wrong Id 【发布时间】:2020-05-24 08:49:30 【问题描述】:public function up()
Schema::create( 'active_stocks', function ( Blueprint $table )
$table->bigIncrements( 'id' );
$table->string( 'sku' );
$table->text( 'title' )->nullable()->default( '' );
$table->integer( 'cost' )->default(0);
$table->integer( 'qty' )->default(0);
$table->string( 'stock_tracking' )->default('')->nullable();
$table->integer( 'type' )->default(1);
$table->text( 'image' )->nullable();
$table->integer( 'user_id' );
$table->integer( 'status' )->default(1);
$table->timestamps();
);
\Illuminate\Support\Facades\DB::statement( "ALTER TABLE `active_stocks` AUTO_INCREMENT = 9999999999;" );
我已将自动增量设置为我在开发中想要的某个值。 然后我使用 Laravel Eloquent 创建一个新记录
$create = App/ActiveStock::create(
[
'sku' => $item_array['sku'],
'qty' => $item_array['qty'],
'stock_tracking' => $item_array['tracking'],
'type' => ActiveStock::TYPE_IMPORTED,
'cost' => $item_array['cost'],
'user_id' => $user_id,
]
)
echo $create->id; //Should be 9999999999
但我得到了这个2147483647
但我查看了数据库,id 值为9999999999
,这是正确的。
我在这里错过了什么。
这是 $create 的完整响应
App\ActiveStock Object
(
[fillable:protected] => Array
(
[0] => sku
[1] => title
[2] => cost
[3] => qty
[4] => stock_tracking
[5] => type
[6] => image
[7] => user_id
[8] => status
)
[connection:protected] => mysql
[table:protected] => active_stocks
[primaryKey:protected] => id
[keyType:protected] => int
[incrementing] => 1
[with:protected] => Array
(
)
[withCount:protected] => Array
(
)
[perPage:protected] => 15
[exists] => 1
[wasRecentlyCreated] => 1
[attributes:protected] => Array
(
[sku] => test-B00MSOIUOO
[qty] => 11
[stock_tracking] =>
[type] => 1
[cost] => 112
[user_id] => 1
[updated_at] => 2020-02-08 17:12:38
[created_at] => 2020-02-08 17:12:38
[id] => 2147483647
)
[original:protected] => Array
(
[sku] => test-B00MSOIUOO
[qty] => 11
[stock_tracking] =>
[type] => 1
[cost] => 112
[user_id] => 1
[updated_at] => 2020-02-08 17:12:38
[created_at] => 2020-02-08 17:12:38
[id] => 2147483647
)
[changes:protected] => Array
(
)
[casts:protected] => Array
(
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[appends:protected] => Array
(
)
[dispatchesEvents:protected] => Array
(
)
[observables:protected] => Array
(
)
[relations:protected] => Array
(
)
[touches:protected] => Array
(
)
[timestamps] => 1
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
)
【问题讨论】:
【参考方案1】:您访问的数字太大。 2147483647
是 32-bit int
的最大限制。
如果您想存储和使用比这更大的数字,您可能需要将列类型从 int
更改为 varchar(100)
。
【讨论】:
【参考方案2】:2147483647 是 32 位有符号整数的最大值。 您可能使用的是 32 位版本的 php。
【讨论】:
这与 PHP 无关。这是一个系统特定的问题。任何尝试使用大于 32 位系统限制的 int 的应用程序都会导致此类行为。以上是关于Laravel 5.8 Eloquent Create() 返回错误的 ID的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 Laravel 5.8 中测试 Eloquent Observers?
如何使用 laravel ORM eloquent 5.8 选择我数据库中每个促销活动的总下载量?
Laravel 5.8 错误 SQLSTATE[HY000]: 一般错误: 1005 uuid
如何在 laravel 5.8 或 6 中制作通用自定义包进行身份验证。*