我有'客户'表
和表'对话'
我是javascript的新手。目前,我尝试使用knex + bookshelf(带有繁琐驱动程序的SQL服务器数据库)来连接这两个表。我将这两个表分成两个模型并从路由器调用它(我使用Node js)。
conversation.js
customer: function() { return this.belongsTo('Customer','uniqueid'); }
customer.js
conversation: function(){ return this.hasMany('Conversation','customer_id'); }
当我尝试将表格加入
时Customer.fetchAll({withRelated:['conversation'], debug: true}).then(function(data{
console.log('data : '+data);
});
不幸的是,我总是得到错误:
未处理拒绝RequestError:nvarchar值的转换 '238998679919674'溢出了一个int列。
我很好奇这个错误来自哪里?因为列的类型是nvarchar,而不是int。
调试的结果是
{ method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [],
__knexQueryUid: '7befdc84-c66c-4278-b88c-d53a306c36db',
sql: 'select [customers].* from [customers]' }
GET /ticket/list 500 16 - 21.899 ms
{ method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings:
[ 1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50 ],
__knexQueryUid: '29ca9239-b7af-4765-95b1-836ed2c570ce',
sql: 'select [conversations].* from [conversations] where [conversations].[customer_id] in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' }
答案 0 :(得分:0)
您尝试在客户ID上加入两个表,对吧?在第一个表(customers)中,id是int,在第二个customer_id中是nvarchar。将int连接到nvarchar时,nvarchar将转换为int,但int数据类型的最大可接受值为2,147,483,647,而conversations.customer_id列的值为“238998679919674”,无法转换为int,这就是错误所说的内容。 您可以尝试加入您的表格
customers.id = conversations.customer_id
但是
cast(customers.id as nvarchar(255) = conversations.customer_id
但是存在一个逻辑错误:并非所有的conversations.customer_id都有相应的customers.id,所以联系可能都不正确