簡體   English   中英

我怎樣才能使查詢 model 關系有很多易於閱讀?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM