【问题标题】:Eloquent model returns 0 as primary keyEloquent 模型返回 0 作为主键
【发布时间】:2016-03-31 06:20:31
【问题描述】:

我有这个迁移:

Schema::create('provincias', function (Blueprint $table) {
    $table->string('codigo', 2);
    $table->string('nombre', 50);
    $table->timestamp('creado');
    $table->primary('codigo');
});

这是我的模型:

class Provincia extends Model
{   
    protected $primaryKey = 'codigo';
    public $timestamps = false;
}

我像这样运行迁移并保存数据:

$provincia = new Provincia;
$provincia->codigo = "BA";
$provincia->nombre = "Buenos Aires";
$provincia->save();

问题是当我得到所有并转储时:

$provincias = Provincia::all();
return $provincias;

即使我检查数据库表并且它具有正确的值,主键“codigo”也始终为 0:

{
    codigo: 0,
    nombre: "Buenos Aires",
    creado: "2015-12-24 21:00:24"
}

【问题讨论】:

  • 尝试在模型 public $incrementing = false; 上将增量设置为 false 看看是否可行

标签: laravel eloquent


【解决方案1】:

您可以尝试在您的模型上设置public $incrementing = false;,这样 eloquent 就不会期望您的主键是自动增量主键。

【讨论】:

  • 非常感谢。令人惊讶的是,在 Laravel 5.1 中我不需要这个属性,但在 5.4 中却要求它。
  • 我刚刚从 Laravel 5.1 迁移到了 5.4。非常感谢您提供的宝贵建议。
  • 当我设置$incrementing = false 它不返回任何ID。我想获取主 ID
【解决方案2】:

还可以设置主键的类型:

protected $keyType = 'string';
public $incrementing = false;

重要提示。您应该添加第二行。 $incrementing = false。如果您不这样做,则在您的模型上调用 save() 后,密钥将为 0。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2015-08-08
    • 2014-12-19
    • 1970-01-01
    • 2015-01-08
    • 2016-04-02
    相关资源
    最近更新 更多