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】:

您访问的数字太大。 214748364732-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 中制作通用自定义包进行身份验证。*

从 Laravel 5.1 升级到 Laravel 5.8 后 whereHas() 变慢

laravel 5.8 在 getenv 上返回 false