我有一個(gè)帶有兩個(gè)主鍵的模型,并且我已經(jīng)覆蓋了 setKeysForSaveQuery()。$object->save() 返回 true,我嘗試 dd 更新的數(shù)據(jù),它顯示已經(jīng)更新,但是刷新數(shù)據(jù)庫后,它沒有被更新。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();
1 回答

紅顏莎娜
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
您正在更新用于查找記錄的鍵,因此它現(xiàn)在將在查詢中使用這個(gè)新鍵,這不是數(shù)據(jù)庫中的當(dāng)前鍵。您需要使用原始鍵以便它可以找到記錄,然后它可以使用新值更新記錄。
你需要做這樣的事情:
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;
}
如果它們存在,則使用這些鍵的原始值,如果不存在,則使用當(dāng)前屬性值。
- 1 回答
- 0 關(guān)注
- 277 瀏覽
添加回答
舉報(bào)
0/150
提交
取消