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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...