在laravel中向$fillable
添加属性时,我们可以在Create / Update中进行质量分配,但我想在create中允许属性进行质量分配但不允许更新。现在我使用Updating Event来实现这一目标。还有更好的方法吗?
protected static function boot()
{
static::updating(function ($product) {
$product->price = $product->getOriginal('price');
}
}
答案 0 :(得分:1)
我会推荐Obeserver
。因为它为您提供了更大的灵活性。
<?php
namespace App\Observers;
use App\User;
class UserObserver
{
/**
* Listen to the User updating event.
*
* @param \App\User $user
* @return void
*/
public function updating(User $user)
{
if($user->isDirty(['price'])){
// it is updated return false.
}
}
}
答案 1 :(得分:0)
从price
删除$fillable
属性,然后使用forceCreate()
创建记录:
$product = Product::forceCreate([
// ...
'price' => 10.50,
];
这将允许您在创建时设置值,但是当您通过$product->fill()
更新模型时,价格不会因为不可填写而改变。您可以随时更改价格值,直接省略质量分配:
$product->price = 11.50;
$product->save();