{"id":15481593,"url":"https://github.com/yeosz/dtool","last_synced_at":"2025-04-22T15:26:28.344Z","repository":{"id":62548421,"uuid":"93465549","full_name":"yeosz/dtool","owner":"yeosz","description":"数据生成器,数据库工具,数据库填充,伪数据,faker,mysql数据字典,数据库比对","archived":false,"fork":false,"pushed_at":"2020-08-18T01:50:44.000Z","size":297,"stargazers_count":30,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-17T04:19:16.401Z","etag":null,"topics":["data-provider","database-design","faker","mysql","pdo","php","postman"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yeosz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-06T02:09:57.000Z","updated_at":"2024-07-09T09:50:06.000Z","dependencies_parsed_at":"2022-11-02T23:45:20.914Z","dependency_job_id":null,"html_url":"https://github.com/yeosz/dtool","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeosz%2Fdtool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeosz%2Fdtool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeosz%2Fdtool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeosz%2Fdtool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yeosz","download_url":"https://codeload.github.com/yeosz/dtool/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250266320,"owners_count":21402270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-provider","database-design","faker","mysql","pdo","php","postman"],"created_at":"2024-10-02T05:05:04.443Z","updated_at":"2025-04-22T15:26:28.317Z","avatar_url":"https://github.com/yeosz.png","language":"PHP","readme":"dtool\n======\n\n## 安装\n\n使用 Composer 安装:\n\n```\ncomposer require \"yeosz/dtool\"\n```\n\n## 使用\n\n### Provider 数据供给器\n\n```php\n$provider = new \\Yeosz\\Dtool\\Provider();\n\n$data = [\n    'string' =\u003e $provider-\u003egetString(10),\n    'mb_string' =\u003e $provider-\u003egetMbString(10),\n    'city' =\u003e $provider-\u003ecity,\n    'address' =\u003e $provider-\u003eaddress,\n    'uuid' =\u003e $provider-\u003euuid,\n    'id_card' =\u003e $provider-\u003eid_card,\n    'image_url' =\u003e $provider-\u003eimage_url,\n    'bitmap_url' =\u003e $provider-\u003ebitmap_url,\n    'name' =\u003e $provider-\u003ename,\n    'first_name' =\u003e $provider-\u003efirst_name,\n    'last_name' =\u003e $provider-\u003elast_name,\n    'phone' =\u003e $provider-\u003ephone,\n    'mobile' =\u003e $provider-\u003emobile,\n    'email' =\u003e $provider-\u003eemail,\n    'qq' =\u003e $provider-\u003eqq,\n    'postcode' =\u003e $provider-\u003epostcode,\n    'company_name' =\u003e $provider-\u003ecompany_name,\n    'ean8' =\u003e $provider-\u003eean8,\n    'ean13' =\u003e $provider-\u003eean13,\n    'timestamp' =\u003e $provider-\u003etimestamp,\n    'year' =\u003e $provider-\u003eyear,\n    'date' =\u003e $provider-\u003edate,\n    'time' =\u003e $provider-\u003etime,\n    'integer' =\u003e $provider-\u003einteger,\n    'random' =\u003e $provider-\u003erandomValue([1, 2, 3]),\n    'payment' =\u003e $provider-\u003epayment,\n    'bank' =\u003e $provider-\u003ebank,\n    'color_name' =\u003e $provider-\u003ecolor_name,\n    'color_hex' =\u003e $provider-\u003ecolor_hex,\n    'color_rgb' =\u003e $provider-\u003ecolor_rgb,\n    'version' =\u003e $provider-\u003eversion,\n    'between' =\u003e $provider-\u003ebetween(11, 99, 1000),\n];\n\nprint_r($data);\n\n// 数字供应器 numberProvider\n$provider-\u003enumberProvider-\u003erandomMediumint();\n// 时间供应器 datetimeProvider\n$provider-\u003edatetimeProvider-\u003etime();\n\n// 自增长\n$provider-\u003eaddIncrement('sort', 1);\nvar_dump($provider-\u003esort);\nvar_dump($provider-\u003esort);\nvar_dump($provider-\u003esort);\n\n// 自定义供应器\n$provider-\u003eaddProvider('my_time', function(){\n    return time();\n});\nvar_dump($provider-\u003emy_time);\n```\n\n### DB PDO封装\n\n```php\n\n$db = new Yeosz\\Dtool\\DB('localhost;port=33060', 'homestead', 'homestead', 'secret');\n\n$sql = \"CREATE TABLE `dtool_test` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名',\n  `name` varchar(20) NOT NULL DEFAULT '' COMMENT '真实姓名',\n  `sex` enum('2','1','0') NOT NULL COMMENT '性别:1男2女0未知',\n  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'user id',\n  `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格',\n  `address` varchar(60) NOT NULL DEFAULT '' COMMENT '地址',\n  `remarks` varchar(128) NOT NULL DEFAULT '' COMMENT '备注',\n  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `unique_username` (`username`) USING HASH\n) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;\";\n$db-\u003equery($sql);\n\n$rows = $db-\u003equery(\"select * from dtool_test where \" . $db-\u003ebuildInCondition('id', [1,2,3,4], true) . \" order by id desc\");\nprint_r($rows);\n\n$row = $db-\u003erow(\"select id,name from dtool_test where id=:id\", ['id'=\u003e1]);\nprint_r($row);\n\n$column = $db-\u003ecolumn(\"select name from dtool_test\");\nprint_r($column);\n\n$cell = $db-\u003ecell(\"select name from dtool_test where id=?\", [1]);\nprint_r($cell);\n```\n\n### MysqlTool MySQL工具\n\n```php\n$db = new Yeosz\\Dtool\\DB('localhost:33060', 'homestead', 'homestead', 'secret');\n\n$tool = new Yeosz\\Dtool\\MysqlTool($db, 'homestead');\n// 生成文档\nfile_put_contents('./document.html', $tool-\u003egetDocument());\n\n// 生成表数据供应器\n$tool-\u003ebuildTableProvider('./tp/', 'TableProvider');\n```\n\n![image](https://raw.githubusercontent.com/yeosz/dtool/master/examples/doc.png)\n\n### TableProvider 表数据供给器\n\n- [DtoolTest](https://github.com/yeosz/dtool/blob/master/examples/tp/DtoolTest.php)\n\n```php\n// omposer.json修改autoload部分,增加命名空间\n$table = new \\TableProvider\\DtoolTest();\n$data = $table-\u003egenerate(); // 生成数据,但不插入数据库\n$table-\u003edb-\u003einsert('dtool_test', $data);\n$table-\u003ecreate(2); // 生成数据,并插入数据库\n// generate和create都可以传入一个闭包参数,对数据进行修改\n$data = $table-\u003egenerate(function ($current){\n    $current['user_id'] = mt_rand(111,999);\n    return $current;\n});\n\n// 表也可以针对某列自定义数据供应器 方法名以dataProvider开头\nclass DtoolTest  extends Base\n{\n    public $table = 'dtool_test';\n    public $columns = [\n        'username' =\u003e [\"getString\",16],\n        'name' =\u003e [\"getString\",16],\n        'sex' =\u003e [\"randomValue\",[\"2\",\"1\",\"0\"]],\n        'user_id' =\u003e [\"custom_user_id\"],\n        'price' =\u003e [\"randomFloat\",8,2],\n        'address' =\u003e [\"getString\",16],\n        'remarks' =\u003e [\"getString\",16],\n        'created_at' =\u003e [\"timestamp\"],\n    ];\n    public $pk = 'id';\n    \n    public function dataProviderCustomUserId()\n    {\n        return mt_rand(111,999);\n    }\n}\n\n```\n\n### MysqlCompare 结构同步\n\n```php\n\n$db1 = new Yeosz\\Dtool\\DB('localhost', 'demo1', 'homestead', 'secret');\n$db2 = new Yeosz\\Dtool\\DB('localhost', 'demo2', 'homestead', 'secret');\n\n$diff = new \\Yeosz\\Dtool\\MysqlCompare($db2, $db1);\n$diff-\u003eshowSql();\n\n```\n\n### Postman\n\n- [postman.js](https://github.com/yeosz/dtool/blob/master/src/resources/postman.js)\n\n接口调试时生成随机数据，方便测试（建议先压缩）\n\n![image](https://raw.githubusercontent.com/yeosz/dtool/master/examples/postman.png)\n\n## 参考\n\n- [详细参考资料](https://github.com/yeosz/dtool/tree/master/src/resources)\n\n# License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeosz%2Fdtool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyeosz%2Fdtool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeosz%2Fdtool/lists"}