Eloquent - выберите один столбец с одинаковым именем из двух разных моделей. - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть Student Model и User Model, у которых есть один столбец с тем же именем (token).Случай, когда я публикую token со страницы пользователей или студентов, я хочу обработать этот запрос с одним контроллером.Что я пробовал,

Class DataController
{
    public function deleteData($request, $response)
    {
        $token = $request->getParam('token');

        $user = User::where('token', $token)->first();
        $student = Student::where('token', $token)->first();

        if ($user) {
            $user->delete();
            // flash message user's data deleted
            // redirect to home
        }

        if ($student) {
            $student->delete();
            // flash message student's data deleted
            // redirect to home
        }

        // flash message error
        // redirect to home
    }
}

Есть ли способ выбрать один столбец из двух моделей?Мой код неправильный, основанный на принципах SOLID?Как я могу очистить свой код?Я все еще изучаю метод рефакторинга для гибкости и не знаю, как это сделать

1 Ответ

0 голосов
/ 21 сентября 2018

Вам не нужны условия, только два запроса.

User::where(compact('token'))->delete();
Student::where(compact('token'))->delete();

Почему вы хотите это сделать, я не уверен.Если Student относится к User, вы должны поддерживать эту связь с внешним ключом.

Не связанные советы:

  • Рассмотрите возможность использования $request->input('token') вместо getParam(),Последний просматривает только строку запроса, и, если для этого нет причины, использование input() - это безопасный способ извлечь данные запроса из строки запроса или тела запроса.
  • Убедитесь, что вы подтвердили $tokenперед применением его к запросу базы данных.Перед выполнением удаления убедитесь, что он не пустой.
  • Узнайте об авторизации.Понимание этого может быть упрощенным представлением вашего контроллера, поскольку любой может удалить любого пользователя, передав действующий токен.
...