首页 文章

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

提问于
浏览
1

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

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我正在尝试

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 回答

  • 1

    根据我的收集,您想要的是能够设置您的 userModelrecordingsModel 模型,通过为 email 提供特定值的记录,它将自动与共享该电子邮件的任何用户相关联 . 这不是Waterline(Sails ORM)支持的 .

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

    // 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'
          }
       }
    }
    

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

相关问题