<?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);
}