laravel 数据库未更新
laravel database not being updated
我有一个带有两个主键的模型,并且我已经覆盖了 setKeysForSaveQuery()。 $object->save() 返回true,我尝试dd更新数据,它显示已经更新,但是刷新数据库后,它没有被更新。
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;
}
这将使用这些键的原始值(如果它们存在),如果不存在则使用当前属性值。
我有一个带有两个主键的模型,并且我已经覆盖了 setKeysForSaveQuery()。 $object->save() 返回true,我尝试dd更新数据,它显示已经更新,但是刷新数据库后,它没有被更新。
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;
}
这将使用这些键的原始值(如果它们存在),如果不存在则使用当前属性值。