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

时间:2017-08-20 06:31:04

标签: laravel laravel-5 eloquent

我使用的是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

数据已成功插入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'
    ];
}

2 个答案:

答案 0 :(得分:2)

问题解决了。我需要声明" public $ incrementing = false;"在我的Model类中。

class FooModel extends Model
{
    protected $table = 'foo_table';
    protected $primaryKey = 'foo_id';
    public $incrementing = false;
    protected $guarded = ['foo_id'];
    protected $casts = [
        'foo_id' => 'integer'
    ];
}

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

abstract class Model {

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

}

答案 1 :(得分:0)

试试这个

$fooModel = $fooModel->save();
echo($fooModel->foo_id);

 $fooModel = $fooModel->save();
    echo($fooModel->id);