数据模型间支持 hasOne 和 hasMany方式关联,查询时通过 withs参数,直接查询关联数据。
编写供应商 supplier
和用户 user
两个数据模型,一个用户对应一家供应商,一家供应商有多个用户。在查询用户时,同时返回所属供应商的信息,查询供应商时,同时返回该供应商的用户列表。
供应商模型 supplier
:
用户模型 user
:
创建数据表
yao migrate
关联关系通过 relations
中声明, 一个数据模型支持多个映射关系声明, 数据结构为{"relation_name":ObjectRelation, "relation_name":ObjectRelation ,...}
Object Relation 数据结构:
字段 | 类型 | 必填项 | 说明 |
---|---|---|---|
name | string | 是 | 关联名称,查询时通过这个名称引用 |
type | enum | 是 | 与当前数据模型的关系类型. hasOne 一对一, hasMany 一对多。 |
model | string | 是 | 关联数据模型 名称 |
key | string | 是 | 关联数据模型 字段的名称,用于关联映射 (关联数据模型.key = 当前数据模型.foreign) |
foreign | string | 是 | 当前数据模型 字段的名称,用于关联映射 (关联数据模型.key = 当前数据模型.foreign) |
query | object | 否 | 关联数据模型 的查询条件,可以在查询时重载。 例: { "select": ["id", "name"] } |
查询用户时,同时返回该用户所属供应商的信息。修改用户模型描述文件 user.mod.yao
,添加 hasOne
关联关系声明。
数据查询
查询用户同时,查询所有供应商信息:
yao run models.user.Find 1 '::{"withs":{ "supplier": {} }}'yao run models.user.Get '::{"withs":{ "supplier": {} }}'
指定关联模型的选取字段:
yao run models.user.Find 1 '::{"withs":{ "supplier": {"query":{ "select":["name"] }} }}'
按关联模型的字段查询条件:
yao run models.user.Get '::{"withs":{ "supplier": {} }, "wheres":[{"rel":"supplier", "column":"name", "value":"Yao App Engine" }]}'
在 JS 中使用任意关联关系 /scripts/test.js
:
function test() {var user = Process("models.user.get", {withs: {supplier: {query: {select: ["name", "id"],},},},wheres: [{ column: "supplier_id", value: 1, op: "=" }],orders: [{ column: "id", option: "desc" }],limit: 1,});return user;}
yao run scripts.test.test
查询供应商时,同时返回该供应商的用户信息。修改用户模型描述文件 supplier.mod.yao
,添加 hasMany
关联关系声明。
数据查询
查询供应商时,同时查询所属用户信息:
yao run models.supplier.Find 1 '::{"withs":{ "users": {} }}'yao run models.supplier.Get '::{"withs":{ "users": {} }}'
指定关联模型的选取字段:
yao run models.supplier.Find 1 '::{"withs":{ "users": { "query":{"select":["name"] }} }}'
指定关联用户筛选条件:
yao run models.supplier.Find 1 '::{"withs":{ "users": { "wheres":[{"column":"name", "value":"张无忌"}] } }}'
数据模型间支持 hasOne 和 hasMany方式关联,查询时通过 withs参数,直接查询关联数据。
编写供应商 supplier
和用户 user
两个数据模型,一个用户对应一家供应商,一家供应商有多个用户。在查询用户时,同时返回所属供应商的信息,查询供应商时,同时返回该供应商的用户列表。
供应商模型 supplier
:
用户模型 user
:
创建数据表
yao migrate
关联关系通过 relations
中声明, 一个数据模型支持多个映射关系声明, 数据结构为{"relation_name":ObjectRelation, "relation_name":ObjectRelation ,...}
Object Relation 数据结构:
字段 | 类型 | 必填项 | 说明 |
---|---|---|---|
name | string | 是 | 关联名称,查询时通过这个名称引用 |
type | enum | 是 | 与当前数据模型的关系类型. hasOne 一对一, hasMany 一对多。 |
model | string | 是 | 关联数据模型 名称 |
key | string | 是 | 关联数据模型 字段的名称,用于关联映射 (关联数据模型.key = 当前数据模型.foreign) |
foreign | string | 是 | 当前数据模型 字段的名称,用于关联映射 (关联数据模型.key = 当前数据模型.foreign) |
query | object | 否 | 关联数据模型 的查询条件,可以在查询时重载。 例: { "select": ["id", "name"] } |
查询用户时,同时返回该用户所属供应商的信息。修改用户模型描述文件 user.mod.yao
,添加 hasOne
关联关系声明。
数据查询
查询用户同时,查询所有供应商信息:
yao run models.user.Find 1 '::{"withs":{ "supplier": {} }}'yao run models.user.Get '::{"withs":{ "supplier": {} }}'
指定关联模型的选取字段:
yao run models.user.Find 1 '::{"withs":{ "supplier": {"query":{ "select":["name"] }} }}'
按关联模型的字段查询条件:
yao run models.user.Get '::{"withs":{ "supplier": {} }, "wheres":[{"rel":"supplier", "column":"name", "value":"Yao App Engine" }]}'
在 JS 中使用任意关联关系 /scripts/test.js
:
function test() {var user = Process("models.user.get", {withs: {supplier: {query: {select: ["name", "id"],},},},wheres: [{ column: "supplier_id", value: 1, op: "=" }],orders: [{ column: "id", option: "desc" }],limit: 1,});return user;}
yao run scripts.test.test
查询供应商时,同时返回该供应商的用户信息。修改用户模型描述文件 supplier.mod.yao
,添加 hasMany
关联关系声明。
数据查询
查询供应商时,同时查询所属用户信息:
yao run models.supplier.Find 1 '::{"withs":{ "users": {} }}'yao run models.supplier.Get '::{"withs":{ "users": {} }}'
指定关联模型的选取字段:
yao run models.supplier.Find 1 '::{"withs":{ "users": { "query":{"select":["name"] }} }}'
指定关联用户筛选条件:
yao run models.supplier.Find 1 '::{"withs":{ "users": { "wheres":[{"column":"name", "value":"张无忌"}] } }}'