在我的项目中,我正在处理多个数据库和一个中央数据库。我正在使用 spatie 的活动日志包将控制面板中完成的操作记录到所有这些数据库中。
我在每个数据库(中央数据库除外)中都有带有自动递增主键的表项,以及另一个名为 hash 的索引,它是一种 uuid。哈希总是唯一的。
现在,当我想记录操作时,我会遇到问题,因为它会保存 Item 的 ID,所以......在我的活动表中,我将获得两个 subject_id = 1 的记录,而一个活动发生在一个数据库和另一个数据库上的 Item在另一个,依此类推。
如何在不更改相关模型上的 $primaryKey 的情况下更改集合变形以使用我的 uuid 列而不是 id?
物品型号关系:
public function activities(): MorphMany
{
$this->morphMany(Activity::class, 'subject', 'subject_id', 'hash');
}
活动模型关系:
public function subject(): MorphTo
{
if (config('activitylog.subject_returns_soft_deleted_models')) {
return $this->morphTo()->withTrashed();
}
return $this->morphTo('activity_log', 'subject_type', 'subject_id', 'hash');
}
另外,我在 ActivityLogger 中发现:
public function performedOn(Model $model)
{
$this->getActivity()->subject()->associate($model);
return $this;
}