Laravel удаляет пользовательский возврат модели

#php #laravel #eloquent #model

#php #laravel #красноречивый #Модель

Вопрос:

Хорошо, итак, я пытаюсь удалить модель, а затем вернуть response()->json([...]) . По какой-то причине, когда я удаляю модель, она всегда возвращает NULL , что бы я ни делал.

Вот функция в User модели, которая используется для удаления данного пользователя.

 /**
 * @return bool|IlluminateHttpJsonResponse|null
 * Delete user
 */
public function deleteUser()
{

    // If the admin deletes his own account we need to check if there is another admin. There must exists at least 1 admin
    if ($this->user_id == auth()->user()->user_id amp;amp; (auth()->user->hasRole('admin'))) {
        if (User::whereHas('roles', function($query) { $query->where('id', 1); })->count() <= 1) {
            return response()->json([
                'success' => false,
                'message' => 'There must be another admin if you remove your own user.'
            ]);
        }
    }

   if (!$this->delete()) {
       return response()->json([
          'success' => false,
          'message' => 'Could not delete user!'
       ]);
   }

    return response()->json([
        'success' => true,
        'message' => 'User was deleted successfully!'
    ]);
  

Есть ли что-то, чего мне не хватает, когда я хочу вернуть пользовательский ответ?

РЕДАКТИРОВАТЬ Вот метод контроллера

 public function postDelete(User $user)
{
    $user->deleteUser();
}
  

Комментарии:

1. Вы хотите иметь возможность удалять пользователя более чем в одном месте вашего приложения, т. Е. У вас есть несколько мест, где пользователь может быть удален?

2. Нет. В настоящее время только из управления пользователями на панели мониторинга.

3. В таком случае, почему вы добавляете такую логику в модель вместо того, чтобы просто сохранить ее в контроллере?

4. Хороший вопрос. Я не знаю, зачем я это делаю, для меня так выглядит лучше, но разве это плохая практика? Должны ли проверки / валидация выполняться в контроллере?

5. Да, я бы определенно рекомендовал просто сохранить его в вашем контроллере. Можете ли вы показать метод контроллера, который вы вызываете deleteUser() ?

Ответ №1:

Вам просто не хватает return в вашем методе контроллера:

 public function postDelete(User $user)
{
    return $user->deleteUser();
}
  

Комментарии:

1. Ого.. Всегда самые незначительные вещи… Спасибо за замечание и советы по сохранению некоторой логики в контроллере. Нужно внести некоторые изменения. 😀

2. @Kaizokupuffball Все в порядке. Рад, что смог помочь! 🙂