【问题标题】:In NodeJS, is there a method similar to dependant: :destroy in Ruby for associated records?在 NodeJS 中,是否有类似于 Ruby 中的dependant: :destroy 用于关联记录的方法?
【发布时间】:2016-06-09 10:05:24
【问题描述】:

我在删除关联农民时尝试删除任务。我已经阅读了续集文档,并且在那里完成了相同的解决方案。但我不能自动删除任务。我还尝试了以下链接中的解决方案:

Sequelize onDelete not working

Sequelize.js onDelete: 'cascade' is not deleting records sequelize

我正在将 sequelizejs 与 mysql 一起使用。

我的模特:

Task.js

'use strict';
var Farmer  = require('./farmer');
module.exports = function(sequelize, DataTypes) {
    var Task = sequelize.define('Task', {
        title: DataTypes.STRING,
        deadline: DataTypes.DATE,
        description: DataTypes.TEXT,
        FarmerId: {
            type: DataTypes.INTEGER,
            references: {
                // This is a reference to another model
                model: Farmer,
                // This is the column name of the referenced model
                key: 'id'
            }
        }
    }, {
    classMethods: {
       associate: function(models) {
          Task.belongsTo(models.Farmer, {foreignKey: 'FarmerId'});
          // associations can be defined here
       }
    }
   });
   return Task;
};

Farmer.js

'use strict';
var validator = require('validator');
module.exports = function(sequelize, DataTypes) {
  var Farmer = sequelize.define('Farmer', {
    username:{
            type: DataTypes.STRING,
            allowNull: false,
    },
    address: DataTypes.STRING,
    email: { 
       type: DataTypes.STRING,
       unique: true,
       allowNull: false,
       validate: {
            isEmail: { args: true, msg: "not a valid email!" },
            len: { args: [0, 100], msg: "email can't be bigger than 100"},
        } 
    },
    phone:{
            type: DataTypes.STRING,
            allowNull: false,
    },
  }, {
    classMethods: {
      associate: function(models) {
          Farmer.hasMany(models.Task, {onDelete: 'CASCADE', hooks:true});
        // associations can be defined here
      }
    }
  });
  return Farmer;
};

我还能做什么?

另外,我需要在mysql相关表上设置'on delete cascade'吗?如果我不这样做,sequelize 定义关联 onDelete 不起作用?

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案1】:

    您可以在 Task 的定义中省略 FarmerId。 Sequelize 通过将 Task 与 Farmer 相关联自动知道有一个 FarmerId。试试看,其他一切似乎都很正常。

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多