Laravel Eloquent 在调用 save() 后重置主键值

rhy*_*thm 1 laravel eloquent laravel-5

我正在使用 Laravel 5.2,当我插入模型时,主键 id 列以某种方式重置为 0。发生的事情如下。

$fooModel = new FooModel();
$fooModel->foo_id = 123;
$fooModel->foo_title = 'foo';
echo($fooModel->foo_id); //123
$fooModel->save();
echo($fooModel->foo_id); //0
Run Code Online (Sandbox Code Playgroud)

数据成功插入到 MySQL 数据库,但 foo_id 列在 PHP 中重置为 0。如果它是一个自动增量列,我知道它会被下一个序列值更新,但这个列不是。有什么我想念的吗?

class FooModel extends Model
{
    protected $table = 'foo_table';
    protected $primaryKey = 'foo_id';
    protected $guarded = ['foo_id'];
    protected $casts = [
        'foo_id' => 'integer'
    ];
}
Run Code Online (Sandbox Code Playgroud)

rhy*_*thm 5

问题解决了。我需要声明“public $incrementing = false;” 在我的模型类中。

class FooModel extends Model
{
    protected $table = 'foo_table';
    protected $primaryKey = 'foo_id';
    public $incrementing = false;
    protected $guarded = ['foo_id'];
    protected $casts = [
        'foo_id' => 'integer'
    ];
}
Run Code Online (Sandbox Code Playgroud)

$incrementing 的默认设置为 true。这就是为什么 laravel 将 id 列设置为 0。

abstract class Model {

    /**
     * Indicates if the IDs are auto-incrementing.
     *
     * @var bool
     */
    public $incrementing = true;

}
Run Code Online (Sandbox Code Playgroud)