Как сделать запрос sql, чтобы показать каждую строку при фильтрации элементов? - PullRequest
0 голосов
/ 27 апреля 2020

Я фильтрую свою таблицу заведений по "category_id", используя sequelize в качестве ORM. Моя проблема в том, что я фильтрую по category_id = 11, ведьма производит что-то вроде:

Выполнено запроса:

WHERE  `subcategories`.`category_id` = 11;

JSON задано (только с одной строкой подкатегории )

"establishments": [
        {
            "id": 11,
            "name": "Tasco do Ti efe",
            "subcategories": [
                {
                    "category_id": 11,
                    "category_type": "fashion",
                    "SubCategoryEstablishements": {
                        "sub_category_id": 31,
                        "establishment_id": 11,
                        "createdAt": "2020-04-26 13:39:20",
                        "updatedAt": "2020-04-26 13:39:20"
                    }
                }
            ],
]

Я хочу иметь возможность найти подходящий ресторан и иметь все подкатегории, которые ему принадлежат, например:

"establishments": [
        {
            "id": 1,
            "name": "Melhor efef",
            "subcategories": [
                {
                "category_id": 21,
                "category_type": "beautycara",
                "SubCategoryEstablishements": {
                    "sub_category_id": 41,
                    "establishment_id": 11,
                    "createdAt": "2020-04-26 13:39:20",
                    "updatedAt": "2020-04-26 13:39:20"
                }
            },
            {
                "category_id": 11,
                "category_type": "fashion",
                "SubCategoryEstablishements": {
                    "sub_category_id": 31,
                    "establishment_id": 11,
                    "createdAt": "2020-04-26 13:39:20",
                    "updatedAt": "2020-04-26 13:39:20"
                }
            },
            {
                "category_id": 31,
                "category_type": "homefamily",
                "SubCategoryEstablishements": {
                    "sub_category_id": 51,
                    "establishment_id": 11,
                    "createdAt": "2020-04-26 13:39:20",
                    "updatedAt": "2020-04-26 13:39:20"
                }
            }
            ],

Что я должен изменить в своем запросе, чтобы сделать это случилось?

1 Ответ

0 голосов
/ 27 апреля 2020

Вам необходимо определить две разные ассоциации таблицы establishment и subcategory. Одна ассоциация будет использоваться для фильтрации, а другая будет использоваться для объединения establishment и subcategory.

Ваши ассоциации должны быть следующими:

subcategory.belongsTo(models.establishment, { foreignKey: 'categoryId', as: 'establishment1' });

subcategory.belongsTo(models.establishment, { foreignKey: 'categoryId', as: 'establishment2' });

Ваше утверждение Sequuelize должно быть следующим образом -

const allEstablishments = establishment.findAll({

    include: [{
            model: establishment,
            as: 'establishment1',
            attributes: [],
            required: true,
            where: {
                [op.and]: [{
                    '$`subcategories`.`category_id`$ = 11'
                }]
            }
        },
        {
            model: establishment,
            as: 'establishment2',
            required: true,
        }
    ]

});

Надеюсь, это поможет!

...