Как заказать столбцы во вложенных моделях в sequelize? - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь получить модель schedule_class в порядке asc, используя столбцы startAt.Связи для моделей следующие:

  • плановый_класс: класс => м: 1
  • класс: учитель => 1: 1
  • класс: плановый_класс => 1: m

Сначала я запрашиваю базу данных для schedule_class, затем включаю класс, связанный с моделью, затем включаю все запланированные классы, связанные с моделью класса, где они попадают в заданный диапазон.Я был в состоянии получить данные без заказа их.Когда я добавляю атрибут order для продолжения, он выдает следующую ошибку.Как я могу получить запланированные классы в порядке asc относительно столбцов startAt?`

" message ":" Неизвестный столбец 'class.name' в 'предложении заказа' "," code ": 500," className ":" general-error "," data ": {}

module.exports = function () {
      return function (context) {
        const sequelize = context.app.get('sequelizeClient');
        context.params.sequelize = {
          raw: false,
          include: [ {model: sequelize.models.attendance, paranoid: true} ],
          order: []
        };
        if(context.params.query && context.params.query.includeClasses) {
          let startDate = new Date();
          startDate.setMonth(startDate.getMonth() -1);
          startDate.setDate(1);
          let endDate = new Date();
          endDate.setMonth(endDate.getMonth() + 2);
          endDate.setDate(0);
          context.params.sequelize.include.push(
            {
              model: sequelize.models.classes,
              paranoid: true,
              include:[
                {
                  model:sequelize.models.teacher,
                  paranoid: true
                },
                {
                  model:sequelize.models.scheduled_class,
                  paranoid: true,
                  where: {
                    startsAt: {
                      $gte: startDate
                    },
                    endsAt: {
                      $lte: endDate
                    }
                  },
                },
                ],
              order: [[sequelize.models.teacher, 'id', 'DESC']]
            });
          context.params.sequelize.order.push([sequelize.models.classes, 'name', 'DESC']);
          //context.params.sequelize.order.push([sequelize.models.teacher, 'id', 'DESC']);
          //context.params.sequelize.order.push([sequelize.models.scheduled_class, 'startsAt', 'DESC']);
          delete context.params.query.includeClasses;
        }
      };
    };

1 Ответ

0 голосов
/ 19 мая 2018

Мне удалось решить проблему, добавив родительскую модель к предложению заказа.

module.exports = function () {
  return function (context) {
    const sequelize = context.app.get('sequelizeClient');
    context.params.sequelize = {
      raw: false,
      include: [ {model: sequelize.models.attendance, paranoid: true} ],
      order: []
    };
    if(context.params.query && context.params.query.includeClasses) {
      let startDate = new Date();
      startDate.setMonth(startDate.getMonth() -1);
      startDate.setDate(1);
      let endDate = new Date();
      endDate.setMonth(endDate.getMonth() + 2);
      endDate.setDate(0);
      context.params.sequelize.include.push(
        {
          model: sequelize.models.classes,
          paranoid: true,
          include:[
            {
              model:sequelize.models.teacher,
              paranoid: true
            },
            {
              model:sequelize.models.scheduled_class,
              paranoid: true,
              where: {
                startsAt: {
                  $gte: startDate
                },
                endsAt: {
                  $lte: endDate
                }
              },
            },
            ],
        });
      context.params.sequelize.order.push([sequelize.models.classes, sequelize.models.scheduled_class, 'startsAt', 'ASC']);
      delete context.params.query.includeClasses;
    }
  };
};

Здесь, после включения модели class => schedule_class, я перенес заказ с помощью schedule_class.startsAt ASC вмассив заказов.

...