Определение значений поля в базе данных в коде Laravel, чтобы сделать код более читабельным

В настоящее время я пишу приложение laravel с частью для отправки сообщений между персоналом компании и клиентами.
Итак, у меня есть поле с именем «статус» в базе данных. В этом поле значение один указывает, что сообщение ожидает ответа, значение два указывает на то, что на него был дан ответ, а значение три указывает на то, что сообщение было закрыто. Однако здесь есть проблема. Непонятно, что делают эти числа, когда кто-то смотрит на мой код.
Есть ли способ определить это число или любой другой способ сделать мой код более читабельным?
(Я использую Laravel Eloquent ORM) Приведенный ниже код предназначен для метода закрытия диалога:

    public function close(Request $request)
    {
        $message = Message::find($request->message_id);
//        Status one indicates that a conversation has been closed
        $message->status = 1;
        $message->save();
        return \response($message, 200);
    }

использовать константы в модели. если вы добавите код своей модели и вариант использования значений статуса к своему вопросу, я могу вам помочь.

N69S 18.03.2022 10:23

Я только что добавил связанный метод. @ N69S

ZOHRE 18.03.2022 10:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
26
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте константы в вашей модели сообщения

class Message
{
    const STATUS_PENDING = 1;
    const STATUS_ANSWERED = 2;
    const STATUS_CLOSED = 3;
//...
}

Тогда ваш код будет читаем

public function close(Request $request)
{
    $message = Message::find($request->message_id);
    $message->status = Message::STATUS_CLOSED;
    $message->save();
    return \response($message, 200);
}

Или, что еще лучше, сделайте его методом в вашей модели поверх значений констант.

public function close(Request $request)
{
    $message = Message::find($request->message_id);
    $message->close();
    return \response($message, 200);
}

Таким образом, вы можете в будущем обновить метод, например

class Message
{
    public function close()
    {
        if ($this->status != self::STATUS_ANSWERED) {
            //log message closed without client answer
        }
        $this->status = STATUS_CLOSED;
        $this->save();
    }
}

Вы могли бы использовать что-то вроде этого. Сначала мы создадим в модели несколько статических переменных, представляющих статус вашего разговора:

public static $_STATUS_PENDING = 1;
public static $_STATUS_ANSWERED = 2;
public static $_STATUS_CLOSED = 3;

Когда вы добавите их, теперь вы сможете вызывать их статически:

$message->status = Message::$_STATUS_PENDING; // 1
$message->status = Message::$_STATUS_ANSWERED; // 2
$message->status = Message::$_STATUS_CLOSED; // 3

Теперь это намного читабельнее.

Вы можете пойти еще дальше и создать другой массив, который вы будете использовать для отображения этих значений, без необходимости делать операторы if-else. Сначала мы создадим массив ключ-значение, который будет представлять значения:

public static function getStatuses()
{
    return [
        self::$_STATUS_PENDING    => 'Pending',
        self::$_STATUS_ANSWERED => 'Answered',
        self::$_STATUS_CLOSED    => 'Closed',
    ];
}

После этого мы создадим функцию, которую вы сможете вызывать на своем экземпляре Message, которая будет отображать статус сообщения:

public function getMessageStatus()
{
    return self::getStatuses()[$this->status];
}

Теперь, когда у нас есть этот метод, мы можем просто вызвать его и получить правильный статус сообщения:

$message->getMessageStatus(); //Pending, Answered or Closed

Зачем объявлять их переменными? их значения не должны изменяться.

N69S 18.03.2022 10:42

Другие вопросы по теме