Laravel有a <select> form helper本字典作为输入.我喜欢把所有这些的价值观放在一个中心位置.例如,我可能有一个如下所示的枚举:

$phoneTypes = [
    'CELL' => "Cellular",
    'HOME' => "Home",
    'WORK' => "Work",
];

我希望在视图/模板和数据库中使用:

Schema::create('customers', function (Blueprint $table) {
    $table->increments('id');
    $table->enum('pri_phone_type',array_keys($phoneTypes));
    ...
});
  1. 有推荐的地方可以放这些吗?
  2. 我能让它们全球化吗?这样我就能在所有视图中轻松访问它们了吗?

推荐答案

? 更新:PHP8.1终于为Enum带来了本机支持!??

See more here:

https://stitcher.io/blog/php-enums

下面我最初的答案不再适用,但是如果您使用的是较旧版本的PHP.


原始答案

您有几个处理枚举的选项.在我们讨论一些之前,我首先强烈建议您not使用DBenum列类型.

数据库枚举有很多问题.我建议阅读本文,例如:

http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

因此,现在让我们看看其他几个选项.

使用Laravel配置

由于您使用的是Laravel,一个非常简单的选项是将一组选项粘贴到一个配置文件中.

假设您创建了一个具有以下内容的新文件config/enums.php:

return [
    'phone_types' => [
        'CELL' => "Cellular",
        'HOME' => "Home",
        'WORK' => "Work",
    ]
];

现在,您可以在代码的任何地方访问config('enums.phone_types'),包括Blade 模板.

使用PHP包

@Banford的答案展示了如何使用类常量执行基本的枚举类型行为.如果您喜欢这种方法,我建议您阅读本文和包,它基于这个概念来提供强类型枚举:

https://stitcher.io/blog/php-enums

https://github.com/spatie/enum

您将创建一个如下所示的类:

/**
 * @method static self cell()
 * @method static self home()
 * @method static self work()
 */
class PhoneTypes extends Enum
{
}

现在你可以在应用程序中拨打PhoneTypes::home().如果需要,可以查看该软件包的文档,了解如何创建值映射.

使用数据库关系

如果您想管理数据库中的选项,我将创建一个单独的phone_types数据库表,并与customers表建立关系.这是一个比使用enum列类型更好的 Select .

Php相关问答推荐

尽管包含目标日期,但日期范围比较仍有意外输出

如何让PHP变量跨越多个脚本调用?

使用PHP阅读XML提要

Nginx重写扩展名为.php的动态URL

仅在WooCommerce管理订单视图上显示订单项自定义元数据

如何删除WordPress用户的个人资料描述或其他个人资料字段中的链接?

在没有symfony应用程序的情况下使用安全Bundle 包时,缺少配置构建器类

获取并判断WooCommerce用户订阅结束日期

WooCommerce HPOS管理订单列表中带有订单元数据的定制列

将客户重定向到自定义感谢页后的空白页

来自POST请求的(无效)json字符串中的奇怪字符(编码问题)

在laravel 9或10 php中向中间件响应添加自定义数据

htaccess 配置提供静态文件和动态文件

如何在laravel中获得两个时间戳之间的小时和分钟差异

将 WooCommerce 0 销售价格替换为自定义文本,并保留常规价格删除线

注册命名空间后如何获取xml node 值?

Shopware 6 AuthControllerDecorator已弃用

在PHP WordPress插件中使用变量连接路径时的问题解决方法

如何获取用户之间的最新消息列表

列表不在 GROUP BY 子句中并且包含 X2CRM 中的非聚合列