solleer / maphper-loader
此包最新版本(v3.1)没有可用的许可信息。
v3.1
2019-05-19 03:06 UTC
Requires
- level-2/dice: ^4.0
- level-2/maphper: ^0.9
This package is auto-updated.
Last update: 2024-09-17 00:43:23 UTC
README
创建 Maphper 实例的简单方法
依赖项
此库依赖于 Dice 和 Maphper,这两个都可以在 Level-2 找到。
目的
此项目开始是为了使创建 Level-2 中 Maphper 类的实例变得更容易,而配置非常少。每个 Loader 只需要一个文件传递给它,然后你可以调用 getMaphper
方法来获取所需的 Maphper。
使用
让我们从 Maphper 的 README 中的第一个示例开始
$pdo = new PDO('mysql:dbname=maphpertest;host=127.0.0.1', 'username', 'password'); $blogSource = new \Maphper\DataSource\Database($pdo, 'blog', 'id'); $blogs = new \Maphper\Maphper($blogSource);
这可以改为一个名为 config.json
的文件,其中包含 Maphper 配置信息
{ "blogs" : { "type" : "database", "table" : "blog", "primaryKey" : "id" } }
然后 PHP 变为
$loader = new \MaphperLoader\Json("config.json", new \Dice\Dice()); $blogs = $loader->getMaphper("blogs");
MaphperLoader 使用 dice 处理依赖项,如 PDO。你只需要为 PDO 添加一个规则,然后就可以设置好了。
关系
MaphperLoader 支持所有 Maphper 关系,包括:一对一、多对一和多对多。
一对一
以下是一对一关系的示例 JSON
{ "blog" : { "type" : "database", "table" : "blog", "primaryKey" : "id", "relations" : [ { "name" : "author", "to" : "author", "type" : "one", "localKey" : "authorId", "foreignKey" : "id" } ] }, "author" : { "type" : "database", "table" : "author", "primaryKey" : "id" } }
一对一关系具有以下属性
name
- 访问关系时的名称to
- 连接到的 Maphpertype
- 关系类型localKey
- 当前 Maphper 中链接的键foreignKey
- 连接到其他 Maphper 的键
多对一
{ "blog" : { "type" : "database", "table" : "blog", "primaryKey" : "id" }, "author" : { "type" : "database", "table" : "author", "primaryKey" : "id", "relations" : [ { "name" : "blogs", "to" : "blog", "type" : "many", "localKey" : "id", "foreignKey" : "authorId" } ] } }
多对一关系与一对一关系具有相同的属性,除了 type
被设置为 many
多对多
{ "actors" : { "type" : "database", "table" : "actor", "primaryKey" : "aid", "relations" : [ { "name" : "movies", "to" : "movies", "type" : "ManyMany", "intermediate" : "cast", "intermediateKey" : "movieId", "foreignKey" : "mid" } ] }, "movies" : { "type" : "database", "table" : "movie", "primaryKey" : "mid", "relations" : [ { "name" : "actors", "to" : "actors", "type" : "ManyMany", "intermediate" : "cast", "intermediateKey" : "actorId", "foreignKey" : "aid" } ] }, "cast" : { "type" : "database", "table" : "cast", "primaryKey" : ["movieId", "actorId"] } }
多对多关系必须有一个中间 Maphper 来连接两个 Maphper。连接的两个 Maphper 也必须定义 ManyMany 关系。在上面的示例中,这是 cast Maphper。
多对多关系具有以下属性
name
- 访问关系时的名称to
- 连接到的 Maphpertype
- 关系类型,在本例中为 "ManyMany"intermediate
- 中间 MaphperintermediateKey
- 连接到其他 Maphper 的中间 Maphper 列表的键foreignKey
- 必须是另一个 Maphper 的主键