Использование презентатора для атрибутов в сводной таблице в Laravel

Мне просто интересно, как идти о реализации шаблона 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

Где я могу поместить этот последний атрибут представления метода? Имея в виду, я также хочу иметь возможность использовать обратную зависимость этого отношения.

Любая помощь с благодарностью

Спасибо!

0

Решение

Вы можете переопределить 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);
}

Модель CommentUserPivot

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

Другие решения

Вы можете использовать пакет Laravel Auto Present для этого. Это позволит вам реализовать класс презентатора в модели с помощью специальных методов, чтобы переопределить обычные свойства данных моделей. Однако я не верю, что это приведет к форматированию данных на пути к модели (если вы имеете в виду обратное).

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

0

По вопросам рекламы [email protected]