在不使用主键的情况下在sails js中填充一对多关系

时间:2016-05-04 18:58:48

标签: mysql node.js sails.js waterline

sails / waterline文档中一对多的示例代码假定主键是两个模型之间的关联(我认为)。

http://sailsjs.org/documentation/concepts/models-and-orm/associations/one-to-many

但是,我的模型有一个引用列,引用一些类似于

的其他值
User
{ 
    id (primary): <int>
    email: <string>
} 

recordings
{
    id (primary): <int>
    email: <that email from user>
}

atm im trying

userModel.js
{
   attributes: {
      email: {
         type: 'string',
            size: 255,
            unique: true
         },
      },
      queries: { 
        columnName: 'email',
        model: 'recordings'
      }
      .....
   }
}

recordingsModel.js
{
   attributes: {
      email: {
         type: 'string',
            size: 255,
         },
      },
      queries: { 
        model: 'user'
      }
      .....
   }
}

并在控制器中

sails.models.user
     .find()
     .populate('queries')
     .exec(function (err, results) {

 });

但是我得到了错误 :ER_BAD_FIELD_ERROR:'字段列表'中的未知列'__queries.queries'

有没有人有一个关于水线中一对多关系的好教程,因为那里的文档非常糟糕所以我觉得我只是不了解如何设计模型。

1 个答案:

答案 0 :(得分:1)

根据我可以收集的内容,您想要的是能够设置recordingsModelemail模型,以便通过为// userModel.js { attributes: { email: { type: 'string', size: 255, unique: true }, }, recordings: { collection: 'recordingsModel', via: 'user' } ..... } } // recordingsModel.js { attributes: { email: { type: 'string', size: 255, }, }, user: { model: 'userModel' } } } 提供一定值的记录,将自动与共享该电子邮件的任何用户相关联。这不是Waterline(Sails ORM)所支持的。

相反,您最好的选择是按照文档中的说明设置模型:

email

我的猜测是你试图避免查找用户ID以便将新录音与之关联起来。如果您将userModel作为user的主键,则可以执行此操作;然后,当您创建新录制内容时,可以将其letters = letters + key; 设置为电子邮件地址,然后将两者关联起来。