adrenalinkin/enum-mapper

组件提供了一种简单的方法,在PHP层而不是数据库中模拟ENUM行为,并将数据库值转换为人类表示形式,反之亦然。

v1.0.3 2018-02-15 10:58 UTC

This package is auto-updated.

Last update: 2024-09-09 02:49:20 UTC


README

介绍

组件提供了一种简单的方法,通过常量使用,在PHP层而不是数据库中模拟ENUM行为。将数据库值转换为人类表示形式,反之亦然。

安装

打开命令行,进入您的项目目录,并执行以下命令以下载此组件的最新稳定版本

    composer require adrenalinkin/enum-mapper

此命令要求您全局安装Composer

使用示例

映射器创建

首先创建映射器类,并从 AbstractEnumMapper 继承。第二步和最后一步 - 确定具有特定前缀的常量列表

  • DB_ - 包含数据库值。
  • HUMAN_ - 包含人类化的值。

假设我们需要存储用户的性别。在这种情况下,我们需要创建映射器类

<?php

use Linkin\Component\EnumMapper\Mapper\AbstractEnumMapper;

class GenderMapper extends AbstractEnumMapper
{
    const DB_UNDEFINED = 0;
    const DB_MALE      = 10;
    const DB_FEMALE    = 20;

    const HUMAN_UNDEFINED = 'Undefined';
    const HUMAN_MALE      = 'Male';
    const HUMAN_FEMALE    = 'Female';
}

使用

fromDbToHuman

通过接收到的数据库值获取人类化值

<?php

    $mapper        = new GenderMapper();
    $dbGenderValue = GenderMapper::DB_MALE; // 10
    $humanValue    = $mapper->fromDbToHuman($dbGenderValue);

变量 $humanValue 将包含 Male 值。 注意:当您尝试获取未注册的值时,将抛出 UndefinedMapValueException

fromHumanToDb

通过接收到的人类化值获取数据库值

<?php

    $mapper           = new GenderMapper();
    $humanGenderValue = GenderMapper::HUMAN_FEMALE; // Female
    $dbValue          = $mapper->fromHumanToDb($humanGenderValue);

变量 $dbValue 将包含 20 值。 注意:当您尝试获取未注册的值时,将抛出 UndefinedMapValueException

getMap

获取数据库值和人类化值的所有可用对的全列表

<?php

    $mapper = new GenderMapper();
    $map    = $mapper->getMap(); // [0 => 'Undefined', 10 => 'Male', 20 => 'Female']

常量使用

您始终可以使用常量作为是

<?php

    if (GenderMapper::DB_UNDEFINED === $maleFromForm) {
        throw new \Exception('Field "Gender" is required in this form');
    }

getAllowedDbValues 和 getAllowedHumanValues

获取数据库值或人类化值的所有可用值列表

<?php

    $mapper       = new GenderMapper();
    $allowedDb    = $mapper->getAllowedDbValues();    // [0, 10, 20]
    $allowedHuman = $mapper->getAllowedHumanValues(); // ['Undefined', 'Male', 'Female']

    // Exclude values from result
    $allowedDb    = $mapper->getAllowedDbValues([GenderMapper::DB_UNDEFINED]);       // [10, 20]
    $allowedHuman = $mapper->getAllowedHumanValues([GenderMapper::HUMAN_UNDEFINED]); // ['Male', 'Female']

getRandomDbValue и getRandomHumanValue

获取随机数据库或人类化值

<?php

    $mapper      = new GenderMapper();
    $randomDb    = $mapper->getRandomDbValue();    // 0 || 10 || 20
    $randomHuman = $mapper->getRandomHumanValue(); // Undefined || Male || Female

    // Exclude values from result
    $randomDb    = $mapper->getRandomDbValue([GenderMapper::DB_UNDEFINED]);       // 10 || 20
    $randomHuman = $mapper->getRandomHumanValue([GenderMapper::HUMAN_UNDEFINED]); // Male || Female

许可证

license