Получить минимальное значение столбца из связанной сущности - PullRequest
0 голосов
/ 06 августа 2020

Пожалуйста, помогите мне. Я не могу найти информацию о том, как это сделать. У меня есть этот код. Он загружает все продукты со всеми отношениями. Одно из отношений - товарная позиция. В сущности товарной позиции у меня есть столбец цены.

Как я могу получить минимальную цену товара, не попадая в свой массив ответов товаров?

const { skip, take } = pagination;

    const query = this.createQueryBuilder('product');

    query.where('product.shop = :id AND product.blocked = FALSE', {
      id: shop.id,
    });

    if (skip) {
      query.offset(Number(skip));
    }

    if (take) {
      query.limit(Number(take));
    }

    query.leftJoin('product.info', 'info');
    query.leftJoin('product.avatar', 'avatar');

    // load product items
    query.leftJoin('product.productItem', 'item');

    query.select([
      'product.id',
      'product.path',
      'info.name',
      'info.description',
      'info.info',
      'info.lang',
      'avatar.path',
      'avatar.type',

      'item.price'
    ]);

    const [list, amount] = await query.getManyAndCount();

Теперь у меня есть:

{
    "list": [
        {
            "id": 3,
            "path": "admin-product-2",
            "order": 1,
            "shop": {
                "id": 1
            },
            "info": [
                {
                    "name": "Admin Name ;)",
                    "description": "Shorty",
                    "info": "",
                    "lang": "RU"
                }
            ],
            "avatar": null,
            "productItem": [
                {
                    "price": 1000
                },
                {
                    "price": 500
                },
                {
                    "price": 300
                },
                {
                    "price": 2000
                },
                {
                    "price": 3000
                }
            ]
        }
    ]
}
........

Но мне нужно:


{
    "list": [
        {
            "id": 3,
            "path": "admin-product-2",
            "order": 1,
            "shop": {
                "id": 1
            },
            "info": [
                {
                    "name": "Admin Name ;)",
                    "description": "Shorty",
                    "info": "",
                    "lang": "RU"
                }
            ],
            "avatar": null,
            "minProductItemPrice": 300
        }
    ]
}

Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 06 августа 2020

Вы уже можете найти ответ на этот вопрос в Stackoverflow.

Вот аналогичный вопрос Typeorm выберите max с указанием c столбец

В основном, getManyAndCount() метод, который вы используете, полезен при извлечении объектов. В вашем случае вы пытаетесь получить совокупное значение, охватывающее несколько сущностей.

Вам нужно сделать отдельный выбор, например,

query.select("MIN(item.price)", "min");

, а затем получить результат с помощью

return query.getRawOne();
...