Как присоединиться к таблице с Sequelize без отношений - PullRequest
0 голосов
/ 23 декабря 2018

Я сделал командную строку SQL, чтобы выбрать, какие данные мне нужны, но я не могу найти способ сделать это с помощью Sequelize.

У меня есть две таблицы.Один с некоторым идентификатором связан с именами, а другой с длинными текстами.Я хочу выделить весь текст, содержащий имена, из идентификатора имени.

Эта команда SQL работает:

SELECT 
    texts.id,
    texts.content
FROM
    text
    INNER JOIN users AS u ON u.id=38
WHERE
    LOWER(texts.content) like concat('%',u.name,'%')

Когда я пытаюсь сделать это с помощью Sequelize, у меня есть что-то вроде этого:

this.modelTexts.findAll({
    include: [
        {
            model: this.modelUsers,
            where: { id: 38 },
        }
    ],
    where: ...
})

Когда я пытаюсь это сделать,У меня есть это сообщение об ошибке:

SequelizeEagerLoadingError: пользователи не связаны с текстами!

Я знаю, что должен сделать что-то вроде:

Users.hasMany(Texts)

Но я не могу найти способ сделать это.

Спасибо, что уделили немного времени на этот запрос!

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Хотя приведенный выше ответ великолепен, я думаю, что он может победить всю цель использования sequelize.Пробовали ли вы следующее:

  • в определении модели текста:

    Text.associate = models => { Text.belongsTo(models.User) }

  • в определении модели пользователя:

    User.associate = models => { User.hasMany(models.Text) }

Дайте мне знать, если у вас все еще проблемы!Понимание того, как работает sequelize, сэкономит вам много часов в долгосрочной перспективе!:)

0 голосов
/ 23 декабря 2018

Для этого вы можете использовать Sequelize Raw , поэтому ваш запрос может выглядеть примерно так:

sequelize.query(`
  SELECT 
    texts.id,
    texts.content
  FROM
    text
  INNER JOIN users AS u ON u.id=38
    WHERE
  LOWER(texts.content) like concat('%',u.name,'%')`
{ type: sequelize.QueryTypes.SELECT});

Или вы можете добавлять ассоциации.Поэтому, где бы в вашем коде вы не определяли модели, добавьте следующий код

User.hasMany('Text', {foreignKey: 'user_id'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...