在 Laravel 中的枢轴 table 中对属性使用演示者

Using a presenter on attributes in a pivot table in Laravel

我只是想知道如何为枢轴内部的属性实施 Presenter 模式 table?例如,考虑这段代码(这只是一个例子,并不是我实际代码的复制):

@foreach($users->comments as $comment)
 <h1>{{ $comment->title }}</h1> // calls 'title()' in CommentPresenter
 <p>{{ $comment->body }}</p> // calls 'body()' in CommentPresenter...
 <p>{{ is_null($comment->pivot->deleted_at) ? '' : '[REMOVED]' :}} // Where can I put this???
@endforeach

我可以在哪里放置最终属性呈现方法?请记住,我也希望能够使用这种关系的倒数。

非常感谢任何帮助

谢谢!

您可以为此使用 Laravel 自动展示包。它将允许您使用特定方法在模型上实现演示器 class 以覆盖模型的正常数据属性。但是,我不认为这会在进入模型的过程中格式化数据(如果这就是你所说的反向)。

https://github.com/ShawnMcCool/laravel-auto-presenter

您可以在您的模型中覆盖 newPivot,然后使用您自己的 Pivot 模型。它将主要被视为 "normal" Eloquent 模型,因此自动演示程序包应该可以工作。

评论模型

public function newPivot(Model $parent, array $attributes, $table, $exists)
{
    if($parent instanceof User){
        return new CommentUserPivot($parent, $attributes, $table, $exists);
    }
    return parent::newPivot($parent, $attributes, $table, $exists);
}

用户模型

public function newPivot(Model $parent, array $attributes, $table, $exists)
{
    if($parent instanceof Comment){
        return new CommentUserPivot($parent, $attributes, $table, $exists);
    }
    return parent::newPivot($parent, $attributes, $table, $exists);
}

CommentUserPivot 模型

class CommentUserPivot extends \Illuminate\Database\Eloquent\Relations\Pivot {
    // presenter stuff
}