微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel4模型主键值在插入后丢失

<?PHP
// Model
class ProfileDelivery extends \Eloquent {
    protected $table = 'profile_delivery';
    protected $guarded = array();
    public $timestamps = FALSE;
}

// Somewhere
$deliveryGuy->id = 1;
print $deliveryGuy->id; // Prints 1
if (!$deliveryGuy->save()) {
    throw new \Exception('Cant save .');
}
print $deliveryGuy->id; // Prints 0

任何人都可以解释为什么ID值丢失了吗?

解决方法:

不确定你是否为你的情况解决了这个问题,但在Laravel 5.1中,这恰好发生在我身上 – 一个表的主键与另一个表的主键相同,因为它们之间存在0或1对1的关系.

发生的事情是Eloquent将主键分配给插入的最后一个插入ID,但由于主键不是自动增量值,因此将其分配给零.它正确存储在数据库中,但如果需要使用该密钥,则保存后的模型无用.解决方案是覆盖具有外部主键的模型的insertAndSetId函数,以防止其设置主键属性.当然,您不希望对任何具有自动递增键的模型执行此操作,只需要手动分配主键的模型.如果您在创建模型后不需要立即使用该模型也没有必要,因为正如我上面所说,数据库中有正确的信息.

protected function insertAndSetId(Builder $query, $attributes)
{
    $id = $query->insertGetId($attributes, $keyName = $this->getKeyName());

    // $this->setAttribute($keyName, $id);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐