我正在尝试创建一个特征(对于模型),它会自动在“调整”表中写入对模型所做的所有更改。它会保存jsons之前和之后的变化。
这是到目前为止的代码(来自Laracasts):
trait LoggingTrait
{
public static function boot()
{
parent::boot();
static::updating(function($action){
$action->adjustments()->create(
[
'user_id' => Auth::id(),
'before' => json_encode(array_intersect_key($action->getOriginal(), $action->getDirty())),
'after' => json_encode($action->getDirty())
]);
});
}
public function adjustments()
{
return $this->morphMany(Adjustment::class, 'adjustable');
}
}
这项工作非常有效,但它不会保存对相关模型的更改。
为了更清楚,这是我的行动模型:
class Action extends Model
{
use LoggingTrait;
public function actionTypes()
{
return $this->belongsToMany(ActionType::class);
}
public function users()
{
return $this->belongsToMany(User::class);
}
public function spreadingMaterial()
{
return $this->belongsTo(SpreadingMaterial::class);
}
}
特征记录对实际Action模型所做的所有更改,但不关心对$ action-> users(),$ action-> spreadingMaterials()和$ action->所做的更改。 actionTypes()。我如何在static :: updating(...)事件中获得这些更改?
或者,如果不可能,那么关于如何解决这个问题的任何其他想法都非常受欢迎。