Мне просто интересно, как идти о реализации шаблона Presenter для атрибутов внутри сводной таблицы? Например, рассмотрим этот код (это всего лишь пример, а не репликация моего реального кода):
@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
Где я могу поместить этот последний атрибут представления метода? Имея в виду, я также хочу иметь возможность использовать обратную зависимость этого отношения.
Любая помощь с благодарностью
Спасибо!
Вы можете переопределить newPivot
в ваших моделях, а затем использовать свой собственный Pivot
модель. Он будет рассматриваться в основном как «нормальная» модель 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);
}
class CommentUserPivot extends \Illuminate\Database\Eloquent\Relations\Pivot {
// presenter stuff
}
Вы можете использовать пакет Laravel Auto Present для этого. Это позволит вам реализовать класс презентатора в модели с помощью специальных методов, чтобы переопределить обычные свойства данных моделей. Однако я не верю, что это приведет к форматированию данных на пути к модели (если вы имеете в виду обратное).