在Laravel代码中定义数据库中某个字段的值,使代码更具可读性

Defining the values of a field in a database in the Laravel code to make the code more readable

目前,我正在编写一个laravel应用程序,其中包含在公司员工和客户之间发送消息的部分。
所以,我在数据库中有一个名为“status”的字段。在此字段中,值为一表示消息正在等待答复,值为二表示已答复,值为三表示消息已关闭。然而,这里有一个问题。当有人查看我的代码时,不清楚这些数字的作用。
有什么方法可以让我定义这个数字或任何其他方法来使我的代码更具可读性吗?
(我正在使用 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);
    }

在消息模型中使用常量

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 语句。首先,我们将创建一个 key-value 数组来表示值:

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