1

我的 AppServiceProvider 启动方法中有一个 morphMap 设置,当 Laravel 可修订包调用记录时会触发该设置,因此不会返回任何内容。我正在寻找如何使用 morphMaps 进行可修改的工作。请注意,revisionable 在保存记录时存储了完整的命名空间,但在调用记录时,revisionable 使用的是我为 morphMap 输入的值。

例如可修订的保存App\Models\Organization\Organization,但我的 morphMap 仅organization在调用修订历史()时将其转换为。

4

1 回答 1

0

我知道这是一个老问题,但我看到 Venturecraft/Revisionable 开发人员没有给出这个问题的答案。

当包尝试使用 in 属性的值实例化一个新模型时会发生错误$this->revisionable_typeVenturecraft\Revisionable\Revision因为使用 $morphClass 数组的键而不是模型的真实命名空间时该类不存在。

我发现当我用这样的 Laravel 访问器覆盖这个属性的值时,问题就解决了:

use Illuminate\Database\Eloquent\Relations\Relation;

public function getRevisionableTypeAttribute($value)
{
    $morphedModel = Relation::getMorphedModel($value);
    return !empty($morphedModel) ? $morphedModel : abort(400, "The namespace {$value} hasn't been added to the Relation::morphMap() method.");
}

现在,我不知道如何在不编辑供应商文件夹中的访问器的情况下将此访问器添加到修订模型。

如果您可以尝试并分享您获得的信息,将会很有帮助。

于 2017-10-04T18:00:36.490 回答