Как создать отношения один-к-одному, используя sequelize и mysql? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь создать отношения один к одному между двумя объектами.Я использую sequelize в качестве ORM для базы данных mysql.

Мои определения моделей следующие:

var user = (sequelize, DataTypes) => {                                                                               
  const User = sequelize.define('user', {                                                                            
    name: {type: DataTypes.STRING, allowNull: false, unique: true }                                                  
  }, {                                                                                                               
    timestamps: false                                                                                                
  });                                                                                                                

  return User;                                                                                                       
};                                                                                                                   

var product = (sequelize, DataTypes) => {                                                                            
  const Product = sequelize.define('product', {                                                                      
    title: {type: DataTypes.STRING, allowNull: false, unique: true, default: 'Coop Default' }                        
  }, {                                                                                                               
    timestamps: false                                                                                                
  });                                                                                                                

  return Product;                                                                                                    
};                                                                                                                   

и взаимно-однозначное отношение выполняется со следующими строками кода

db.product.belongsTo(db.user);                                                                                       
db.user.hasOne(db.product);  

Но этоне создавать уникальный внешний ключ в таблице products.

mysql> desc products;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| title  | varchar(255) | NO   | UNI | NULL    |                |
| userId | int(11)      | YES  | MUL | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Что еще я должен сделать в ORM, чтобы убедиться, что userId уникален?

1 Ответ

0 голосов
/ 12 февраля 2019

Я могу наложить ограничение unique на ForeignKey, упомянув его в определении модели, по-видимому, sequelize не может сделать это из ассоциаций.

var product = (sequelize, DataTypes) => {                                                                            
  const Product = sequelize.define('product', {                                                                      
    title: { type: DataTypes.STRING,                                                                                 
             allowNull: false,                                                                                       
             unique: true                                                                                            
           },                                                                                                        

    userId: { type: DataTypes.INTEGER,                                                                                  
           allowNull: false,                                                                                         
           unique: true                                                                                              
         }                                                                                                           
  }, {                                                                                                               
    timestamps: false                                                                                                
  });                                                                                                                

  return Product;                                                                                                    
};                                                                                                                   
...