<?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 举报,一经查实,本站将立刻删除。