五月天激情丁香,国产精品2019,国产成人精品亚洲2020,国产精品免费视频一区二区三区,开心久久婷婷综合中文字幕,天堂视频在线观看免费完整版

轉(zhuǎn)換字段

例如我們有數(shù)據(jù)表 student_infoDDL 如下:

CREATE TABLE `student_info` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `studentId` int unsigned NOT NULL DEFAULT '0' COMMENT 'student id',
  `address` json DEFAULT NULL COMMENT 'address',
  `note` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'note',
  `sex` tinyint unsigned NOT NULL DEFAULT '0' COMMENT 'sex:1=male 2=female 0=unknown',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

我們可以對(duì) addresssex 字段做轉(zhuǎn)換處理來(lái)滿(mǎn)足業(yè)務(wù)開(kāi)發(fā)需求,這里我們用到了 php8 的枚舉特性。

定義為模型為:

<?php
namespace EasySwoole\FastDb\Tests\Model;

use EasySwoole\FastDb\AbstractInterface\AbstractEntity;
use EasySwoole\FastDb\Attributes\Property;
use EasySwoole\FastDb\Tests\Model\Address;
use EasySwoole\FastDb\Tests\Model\SexEnum;

class StudentInfoModel extends AbstractEntity
{
    #[Property(isPrimaryKey: true)]
    public int $id;

    #[Property()]
    public int $studentId;

    #[Property(
        convertObject: Address::class
    )]
    public Address $address;

    #[Property]
    public ?string $note;

    #[Property(
        convertObject: SexEnum::class
    )]
    public SexEnum $sex;

    function tableName(): string
    {
        return "student_info";
    }
}

Address.php

<?php
namespace EasySwoole\FastDb\Tests\Model;

use EasySwoole\FastDb\AbstractInterface\ConvertJson;

class Address extends ConvertJson
{
    public $city;
    public $province;
}

SexEnum.php 使用枚舉特性。

<?php
namespace EasySwoole\FastDb\Tests\Model;

use EasySwoole\FastDb\AbstractInterface\ConvertObjectInterface;

enum SexEnum implements ConvertObjectInterface
{
    case UNKNUWN;
    case MALE;
    case FEMAILE;

    public static function toObject(mixed $data): object
    {
        switch ($data){
            case 1:{
                return self::MALE;
            }
            case 2:{
                return self::FEMAILE;
            }
            default:{
                return self::UNKNUWN;
            }
        }
    }

    function toValue()
    {
        return match ($this){
            self::MALE=>1,
            self::FEMAILE=>2,
            default=>0
        };
    }
}

轉(zhuǎn)換字段使用示例:

<?php
// 添加記錄
$address = new \EasySwoole\FastDb\Tests\Model\Address();
$address->province = 'FuJian';
$address->city = 'XiaMen';
$sex = \EasySwoole\FastDb\Tests\Model\SexEnum::MALE;
$model = new StudentInfoModel([
    'studentId' => 1,
    'address'   => $address->toValue(),
    'sex'       => $sex->toValue(),
    'note'      => 'this is note',
]);
// or
// $model->address = $address;
// $model->sex = $sex;
$model->insert(); // INSERT  INTO `student_info` (`studentId`, `address`, `note`, `sex`)  VALUES (1, '{\"city\":\"XiaMen\",\"province\":\"FuJian\"}', 'this is note', 1)

// 查詢(xún)一條數(shù)據(jù)
$studentInfo = StudentInfoModel::findRecord(1);
var_dump($studentInfo->address->city); // "XiaMen"
var_dump($studentInfo->address->province); // "FuJian"
var_dump($studentInfo->sex); // 枚舉類(lèi)型 enum(EasySwoole\FastDb\Tests\Model\SexEnum::MALE)
var_dump($studentInfo->toArray(false));

// 查詢(xún)多條數(shù)據(jù)
$studentInfo = new StudentInfoModel();
$studentInfos = $studentInfo->all();
foreach ($studentInfos as $studentInfo) {
    var_dump($studentInfo->address->city);
    var_dump($studentInfo->address->province);
    var_dump($studentInfo->sex);
    var_dump($studentInfo->toArray(false));
}
主站蜘蛛池模板: 久久九九99 | 天天插天天狠 | 青青草伊人久久 | 亚洲成av人片天堂网 | 黄色在线观看www | 五月天激激婷婷大综合蜜芽 | 国产夜色 | 久久免费视频一区 | 久久久婷婷亚洲5月97色 | 成 人 免费 黄 色 视频 | 国产一区二区三区在线观看免费 | 片免费观看网站视频 | 久久久久99 | 激情婷婷网 | 99成人在线| 国内自拍第1页 | 久久久久久久男人的天堂 | 免费看片免费播放国产 | 国产片欧美片亚洲片久久综合 | 欧美亚洲精品在线 | a级理论片 | 七月丁香八月婷婷综合激情 | 欧美综合天天夜夜久久 | 激情五月播播 | 久久亚洲日本不卡一区二区 | 天天五月天 | 97成网| 精品福利一区二区在线观看 | 丁香五香天堂网 | 久久99九九99九九精品 | 青草青青在线视频观看 | 亚洲成a人片77777在线播放 | 试看视频免费体验区 | 欧美69式视频在线播放试看 | 啪啪网站免费看 | 国产精品视频视频久久 | 免费看涩涩视频网站入口 | 国产无限制自拍 | 免费免播放器在线视频观看 | 国产看色免费 | 成人小视频免费在线观看 |