Size: a a a

Sequelize - community (eng/ru)

2020 September 08

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
это разные модели, так не получится
источник

E

Eldar in Sequelize - community (eng/ru)
=((((
источник

E

Eldar in Sequelize - community (eng/ru)
я как то видел раньше делали вроде
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Чернев Евгений
жаль
я имел ввиду что для много ко многому нельзя. если связь один к одному, то можно попробывать
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Eldar
я как то видел раньше делали вроде
не вкурсе
источник

E

Eldar in Sequelize - community (eng/ru)
1 - много
источник

E

Eldar in Sequelize - community (eng/ru)
Yaroslav Zhymkov
это разные модели, так не получится
а двумия внешними ключаи можна?
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Eldar
а двумия внешними ключаи можна?
что можно?
источник

E

Eldar in Sequelize - community (eng/ru)
Yaroslav Zhymkov
что можно?
засетить значения чтоб внутри были
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
средствами орм нет, по крайней мере я не знаю как. вручную можно
источник

E

Eldar in Sequelize - community (eng/ru)
ок =(
источник

D

Dmitry in Sequelize - community (eng/ru)
Всем привет!
Можете объяснить как работает удаление объектов в случае M:N?
Допустим, A -> AB <- B, я удаляю запись в таблице B,
Если при этом в таблице AB есть запись с id из таблицы B что произойдет?
Удаление будет успешным?
А что надо сделать, чтобы бросилось исключение, если на удаляемую запись кто-то ссылается?
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Dmitry
Всем привет!
Можете объяснить как работает удаление объектов в случае M:N?
Допустим, A -> AB <- B, я удаляю запись в таблице B,
Если при этом в таблице AB есть запись с id из таблицы B что произойдет?
Удаление будет успешным?
А что надо сделать, чтобы бросилось исключение, если на удаляемую запись кто-то ссылается?
орм не вносит ничего нового в бд. лишь абстракция. исключение и т.д. это логика субд. если там описаны foreign ключи то не даст удалить и бросит исключение. читайте про foreign ключи в своей субд
источник

D

Dmitry in Sequelize - community (eng/ru)
Тоже верно. Об этом не подумал
источник

OD

Oleg Dubovitsky in Sequelize - community (eng/ru)
Всем привет, подскажите, пожалуйста, какой нибудь бест практис как сделать мультиязычное приложение Sequelize-typescript или кроме Sequelize-i18n лучше решения нет ?
источник
2020 September 09

С

Сергей in Sequelize - community (eng/ru)
Здравствуйте. Подскажите, пожалуйста, как выбрать записи чата(таблица chat_message) из 3-х таблиц, но чтобы данные из 3-й таблицы(social) попали через поле(soc_id) из промежуточной таблицы(users).
В таблице chat_message в поле user_id хранится id пользователя из таблицы users, в таблице users в поле soc_id хранится id из таблицы social.

схема chat_message:
module.exports = function(sequelize, DataTypes) {
 return sequelize.define('chat_message', {
   id: {
     type: DataTypes.INTEGER,
     allowNull: false,
     primaryKey: true
   },
   user_id: {
     type: DataTypes.INTEGER,
     allowNull: true,
     references: {
       model: {
         tableName: 'users',
       },
       key: 'id'
     }
   },
   message: {
     type: DataTypes.STRING,
     allowNull: true
   }
 }, {
   sequelize,
   tableName: 'chat_message',
   schema: 'public'
 });
};

схема users:
module.exports = function(sequelize, DataTypes) {
 return sequelize.define('users', {
   id: {
     type: DataTypes.INTEGER,
     allowNull: false,
     primaryKey: true
   },
   soc_id: {
     type: DataTypes.INTEGER,
     allowNull: true,
     defaultValue: 0,
     references: {
       model: {
         tableName: 'social',
       },
       key: 'id'
     }
   },
   name: {
     type: DataTypes.STRING,
     allowNull: true,
     defaultValue: "NULL"
   }
 }, {
   sequelize,
   tableName: 'users',
   schema: 'public'
 });
};

схема social:
module.exports = function(sequelize, DataTypes) {
 return sequelize.define('social', {
   id: {
     type: DataTypes.INTEGER,
     allowNull: false,
     primaryKey: true
   },
   data: {
     type: DataTypes.JSON,
     allowNull: true
   }
 }, {
   sequelize,
   tableName: 'social',
   schema: 'public'
 });
};

вызываю так:
models.ChatMessage.belongsTo(models.Users, {foreignKey: 'user_id'});
models.Social.hasOne(models.Users, {foreignKey: 'soc_id'});

let posts = await models.ChatMessage.findAll({
 attributes: ['message'],
 include: [
   {
     model: models.Users,
     attributes: ['name'],
     required: true,
   },
   {
     model: models.Social,
     tableName: 'social',
     attributes: ['data'],
     required: true,
   },
 ],
 limit: 10
});

На выходе хочу получить столбцы message, name, data, но при таком вызове появляется error "social is not associated to chat_message", оно и понятно, таблица chat_message и не должна быть связана с social, она ничего не знает про таблицу social, а если убрать из вызова это:
{
 model: models.Social,
     tableName: 'social',
   attributes: ['data'],
   required: true,
}
то всё возвращается как надо, кроме столбца data из таблицы social соответственно.
источник

С

Сергей in Sequelize - community (eng/ru)
пробовал вызывать ещё так:
let posts = await models.ChatMessage.findAll({
           attributes: ['message'],
           include: [
               {
                   model: models.Users,
                   attributes: ['login'],
                   required: true,
                   include: [{
                       model: models.Social,
                       tableName: 'social',
                       attributes: ['data'],
                       required: true,
                   }],
               },
           ],
           limit: 10
       });

но тогда пишет "social is not associated to users!", хотя они же связаны между собой
источник

С

Сергей in Sequelize - community (eng/ru)
по сути вот этот запрос в raw sql:
SELECT
chat.message as message,
u.name as name,
s.data as data

FROM chat_message chat
left join users u on u.id = chat.user_id
left join social s on s.id = u.soc_id

Но не получается никак реализовать его через ORM
источник

YZ

Yaroslav Zhymkov in Sequelize - community (eng/ru)
Сергей
пробовал вызывать ещё так:
let posts = await models.ChatMessage.findAll({
           attributes: ['message'],
           include: [
               {
                   model: models.Users,
                   attributes: ['login'],
                   required: true,
                   include: [{
                       model: models.Social,
                       tableName: 'social',
                       attributes: ['data'],
                       required: true,
                   }],
               },
           ],
           limit: 10
       });

но тогда пишет "social is not associated to users!", хотя они же связаны между собой
Должно работать проверяйте синтаксис
источник

С

Сергей in Sequelize - community (eng/ru)
Yaroslav Zhymkov
Должно работать проверяйте синтаксис
да уже раз 10 проверил, всё вроде правильно, но выдаёт social is not associated to users
источник