【发布时间】:2023-03-27 14:50:01
【问题描述】:
我需要在 mt 项目中广泛使用状态。我的users(active、suspended 等)、一个实体(active、pending_activation、inactive)和我的订阅(active、on_grace_period、@987654329)需要它们@, never_subscribed)。
到目前为止,我认为最好的方法是将它们存储在数据库中,但我觉得将它们存储在其他 3 个选项中要容易得多。
我还认为我可以将它们作为常量存储在我的 Eloquent 模型中。例如,我的订阅模型如下所示:
// SubscriptionModel
const SUBSCRIBED_ACTIVE = 1;
const SUBSCRIBED_ON_GRACE_PERIOD = 2;
const NOT_SUBSCRIBED = 3;
const NEVER_SUBSCRIBED = 4;
并检索它们,例如在刀片视图中:
// subscription/index.blade.php
@if($user->subscription->status == /App/SubscriptionModel::SUBSCRIBED_ACTIVE)
<div>You are subscribed. Thank you</div>
@elseif($user->subscription->status == /App/SubscriptionModel::NEVER_SUBSCRIBED)
<div>You need to create a subscription before being granted full access!</div>
@elseif(...)
// and so on
如何做同样的事情,但使用 config 文件夹并添加一个名为 status.php 的文件。在视图中访问它就像:
@if($user->subscription->status == Config::get('status.subscription.SUBSCRIBED_ACTIVE'))
<div>You are subscribed. Thank you</div>
@elseif(...)
// etc
有没有更好的办法?
另外,等式的另一部分如何,即存储在DB 中的状态。我是否应该只为订阅表创建一个 status 列并存储应用程序指定的内容,或者甚至更好地创建一个单独的表 subscription_statuses 并在 subscriptions 表中创建一个 foreign_key subscription_status_id?
【问题讨论】:
-
这些当然应该存储在数据库中,看下面我的回答
-
即使存储在数据库中也需要
Model::select('myvar')->where('myvar','=' myvar)->get();。 @Cristian,检查我的 awnser,您可以在.envos 中使用全局变量为此创建一个文件。这取决于你是否需要更多的变量,如果你只需要 4 个变量,你不应该只为它们创建一个文件,它并不优雅。我在我的答案中标记了一条评论,因为用户投票反对,原因是probavly* you must create and config file not .env。人们对您投反对票并且没有解决方案或解释为什么您的答案不是更好,这很糟糕。 -
如果需要方便按状态选择用户,您可以编写范围。存储在 env 文件中是最糟糕的地方。您有不同环境的 env 文件,并且必须跨 env 文件维护这些列表。它们应该存储在一个中心位置,即数据库中。如果没有它,您将如何仅通过查看数据库来确定状态?你的回答被否决了,因为这是个糟糕的建议。
标签: php mysql laravel eloquent status