2015-02-11 5 views
0

Я хочу, чтобы создать модель, которая выглядит следующим образом:SequelizeJS отношения, та же модель

var category = db.define('category', { 
 
    name: { 
 
     type: Types.STRING, 
 
    }, 
 
    position: { 
 
     type: Types.INTEGER 
 
    } 
 
    }, { 
 
    classMethods:{ 
 
     associate: function (models) { 
 
     category.belongsTo(models.category); 
 
     category.hasMany(models.category); 
 
     } 
 
    } 
 
    });

Он работает в моей базе данных, у меня есть «CategoryId» в категории в таблице, но когда я хотите включить модель категории на мой запрос не работает, я получаю вопрос:

Error: ER_NONUNIQ_TABLE: Not unique table/alias: 'category' 

И мой запрос:

this.context.category.findAll({include: [{model: this.context.category}]}); 
+0

Хмм вы делаете с одной и той же таблицы? Я немного путаюсь с тем, что вы пытаетесь сделать здесь. Если вы просто хотите найти все элементы категории таблицы, вы могли бы просто найти All. – dege

+0

В каждой категории может быть категория родителей или детей ... – tonymx227

ответ

1

Вам просто нужно Инвер порядка соотношений (belongsTo/hasMany)

var category = sequelize.define('category', { 
    name: { 
     type: Sequelize.STRING, 
    }, 
    position: { 
     type: Sequelize.INTEGER 
    } 
    }, { 
    classMethods:{ 
     associate: function (c) { 
     category.hasMany(c); 
     category.belongsTo(c); 
     } 
    } 
    }); 
+0

Хорошо, и это лучший способ использовать «hasMany» в этом случае? Или «hasOne» может быть лучше? – tonymx227

+0

это зависит от того, что вы хотите. Если вы просто хотите, чтобы в категории была одна подкатегория (дочерняя), вы можете просто использовать hasOne, если вы хотите больше одного, вы должны использовать hasMany. – dege

+0

Если вы спрашиваете, оптимизировали ли sequelize отношения только с одним ребенком с hasOne, возможно, но я не уверен, но с отношением hasOne вы можете сделать getCategory, чтобы получить ребенка, с hasMany у вас будет getCategorys, который даст вы массив со всеми дочерними элементами. Надеюсь, это поможет :) – dege

Смежные вопросы