Я хочу восстановить комментарии, прикрепленные к сообщению после сообщение восстановлено.
Это не удалось:
public function restored(Post $post)
{
$post->comments()
->onlyTrashed()->where('deleted_at', '>=', $post->deleted_at)
->get()
->each(function ($comment) {
$comment->restore();
});
}
Это работает:
public function restoring(Post $post)
{
$post->comments()
->onlyTrashed()->where('deleted_at', '>=', $post->deleted_at)
->get()
->each(function ($comment) {
$comment->restore();
});
}
Разница: restoring()
вместо restored()
.
Следующее условие: where('deleted_at', '>=', $post->deleted_at)
здесь, потому что я не хочу восстанавливать комментарии, которые были удалены софтпрежде чем пост был удален. Другими словами, я не хочу восстанавливать комментарии, которые были удалены софт модераторами. Я хочу восстановить комментарии, которые были мягко удалены, в тот самый момент, когда я мягко удалил сообщение.
Причина, по которой это не удалось: я считаю, что это не удается с restored()
, потому что $post->deleted_at
становится null
, поэтому ябольше не могу использовать его в моем состоянии where(...)
.
Вопрос: как мне сохранить предыдущее значение $post->deleted_at
, прямо перед его восстановлением? Я пытался играть с getDirty()
и getChanges()
, но это не помогло, они не сохраняют след предыдущего значения в наблюдателе.
Я также попробовал следующее:
public function restoring(Post $post)
{
$this->deleted_at = $post->deleted_at;
}
мышлениеэто позволило бы мне «сохранить» значение $post->deleted_at
и использовать его в моем методе restored()
. Но нет.
Я заметил restored()
восстанавливает только первый комментарий. Это как если бы комментарий был восстановлен внутри своего рода цикла, тогда $post->deleted_at
, потому что null
(очевидно, потому что это restored
, а не restoring
), поэтому он не может продолжить восстановление других комментариев в Коллекции. Я думаю, что это выдает ошибку, потому что я предполагаю, что цикл затем пытается сделать что-то вроде where('deleted_at', '>=', null)
(обратите внимание на `` `null``) '. Конечно же, это работает:
public function restored(Post $post)
{
$post->comments()
->onlyTrashed()
->get()
->each(function ($comment) {
$comment->restore();
});
}
(обратите внимание, это restored()
, но мне пришлось избавиться от моего where(...)
, но мне действительно нужно это where(...)
условие).
В основном и TL; DR : как я могу получить «старое» значение $post->deleted_at
(значение непосредственно перед его восстановлением), в моем public function restoring(Post $post) { }