我注意到當我使用 eloquentupdate()方法時,它也會更新臟列:
$user = User::find(1);
$user->is_admin = 1;
$user->update(['first_name' => 'Alex']);
//is_admin updated to 1 !
它不應該只更新first_name列嗎?
什么 eloquent 方法只更新給定的欄位而忽略臟列?
請注意,我知道refresh和fresh添加額外查詢的方法,這不是我尋找的方法。
uj5u.com熱心網友回復:
要將模型屬性重置為原始屬性(從第一個查詢或最后一個新鮮/重繪 )使用 syncOriginal()
在這種情況下,在更新后使用時它將不起作用,因為當您使用模型實體進行更新時,它還會更新臟屬性is_admin(檢查您的資料庫)。
正如檔案定義所示,它仍然->save()在模型上運行,并且也會在模型上保存更改is_admin。
/**
* Update the model in the database.
*
* @param array $attributes
* @param array $options
* @return bool
*/
public function update(array $attributes = [], array $options = [])
{
if (! $this->exists) {
return false;
}
return $this->fill($attributes)->save($options);
}
解決方案是忽略該實體并進行新的查詢
$user = User::find(1);
$user->is_admin = 1;
User::whereKey($user->getKey())->update(['first_name' => 'Alex']);
//you should also set it in the model
$user->first_name = 'Alex';
$user->setOriginalAttribute('first_name', 'Alex');
uj5u.com熱心網友回復:
據我所知,沒有內置方法可以在更新之前恢復值,但您可以自己制作:
$user = User::find(1);
$user->is_admin = 1;
$user->update(array_merge($user->getOriginal(), ['first_name' => 'Alex']));
這應該只更新,first_name但也可能恢復臟屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335276.html
標籤:拉拉维尔
