Php 没有更新laravel数据库

Php 没有更新laravel数据库,php,database,laravel,laravel-5,insert-update,Php,Database,Laravel,Laravel 5,Insert Update,我有一个带有两个主键的模型,并且我已经重写了setKeysForSaveQuery()$object->save()返回true,我尝试添加更新的数据,它显示已经更新,但在刷新数据库后,它没有被更新 class Test extends Model { protected $primaryKey = ['number','type']; public $incrementing = false; protected $fillable = [ 'number

我有一个带有两个主键的模型,并且我已经重写了setKeysForSaveQuery()$object->save()返回true,我尝试添加更新的数据,它显示已经更新,但在刷新数据库后,它没有被更新

class Test extends Model
{
    protected $primaryKey = ['number','type'];
    public $incrementing = false;
    protected $fillable = [
       'number','type'
    ];

    protected function setKeysForSaveQuery(Builder $query)
    {
        $query
            ->where('number', '=', $this->getAttribute('number'))
            ->where('type', '=', $this->getAttribute('type'));
        return $query;
    }
}
这就是我在控制器中更新模型的方式

$object=Test::where('number',$number)->where('type','string')->first();
$object->number=$target_number;
$object->save();

您正在更新用于查找记录的键,因此它现在将在查询中使用此新键,而不是数据库中的当前键。您需要使用原始键,以便它可以找到记录,然后它可以使用新值更新记录

您需要执行以下操作:

protected function setKeysForSaveQuery(Builder $query)
{
    $number = $this->original['number'] ?? $this->getAttribute('number');
    $type = $this->original['type'] ?? $this->getAttribute('type');

    $query->where('number', '=', $number)
        ->where('type', '=', $type);

    return $query;
}
这将使用这些关键点的原始值(如果存在),如果不存在,则使用当前属性值