[英]How can I make query model relation has to many easy to read?
我的查詢有很多這樣的:
const query = Buyer.query()
.select('id', 'buyer_name', 'description')
query.preload('products', (query) => {
query.select('id', 'product_name', 'buyer_id')
})
query.orderBy('buyer_name', 'desc')
如果查詢運行,結果如下:
{
"data": [
{
"id": 1,
"buyer_name": "John Terry",
"description": "Voluptates ducimus ut ducimus perferendis placeat omnis qui voluptas omnis.",
"products": [
{
"id": 1,
"buyer_id": 1,
"category_name": "category 1",
"category_id": 1,
},
{
"id": 2,
"buyer_id": 1,
"category_name": "category 1",
"category_id": 1,
}
]
},
{
"id": 2,
"buyer_name": "Frank Lampard",
"description": "Eligendi itaque velit placeat nulla.",
"products": [
{
"id": 3,
"buyer_id": 2,
"category_name": "category 2",
"category_id": 2,
},
{
"id": 4,
"buyer_id": 2,
"category_name": "category 2",
"category_id": 2,
}
]
}
]
}
我想要 model 關系查詢的結果,如下所示:
{
"data": [
{
"id": 1, // this is buyer id
"buyer_name": "John Terry",
"description": "Voluptates ducimus ut ducimus perferendis placeat omnis qui voluptas omnis."
"category_name": "category 1",
"category_id": 1,
},
{
"id": 2, // this is buyer id
"buyer_name": "Frank Lampard",
"description": "Eligendi itaque velit placeat nulla."
"category_name": "category 2",
"category_id": 2,
},
]
}
所以調用這個 api/query 時很容易使用
我嘗試了查詢生成器,它可以工作。 但我想使用 model 因為它更干凈
我怎么解決這個問題?
請幫忙。 謝謝
注意:文檔: https://docs.adonisjs.com/guides/models/relationships#preload-relationship
每個買家只有 1 個類別 ID
這假設每個買家至少有一個項目,並使用“每個買家只有 1 個類別 id”這一事實
const query = null; // your query, but has to be null to run in this snippet const result = // await query {data:[{id:1,buyer_name:"John Terry",description:"Voluptates ducimus ut ducimus perferendis placeat omnis qui voluptas omnis.",products:[{id:1,buyer_id:1,category_name:"category 1",category_id:1},{id:2,buyer_id:1,category_name:"category 1",category_id:1}]},{id:2,buyer_name:"Frank Lampard",description:"Eligendi itaque velit placeat nulla.",products:[{id:3,buyer_id:2,category_name:"category 2",category_id:2},{id:4,buyer_id:2,category_name:"category 2",category_id:2}]}]}; const formattedResult = { data: result.data.map((buyer) => ({ id: buyer.id, buyer_name: buyer.buyer_name, description: buyer.description, category_name: buyer.products[0].category_name, category_id: buyer.products[0].category_id, })), }; console.log(formattedResult);
這是查詢構建器為hasMany
關系類型返回的結構。 要獲得您想要的結構化結果,您需要手動轉換它,如下所示:
const query = ... // your query
const result = await query
const formattedResult = {
data: result.data.reduce(
(prev, curr) =>
prev.concat(
curr.products.map((p) => ({
id: p.id,
buyer_name: curr.buyer_name,
product_name: p.product_name,
description: curr.description,
}))
),
[]
),
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.