Bookshelf.js-有一种关系不太好

Bookshelf.js - hasOne relationship not working well

本文关键字:关系 一种 js- Bookshelf      更新时间:2024-04-14

我还不太熟悉bookboxf.js,所以请耐心等待。

由于我在学习,我使用MySQL,并且有一个非常简单的结构。也就是说,两个实体,带有一个辅助密钥。这是我的结构:

CREATE TABLE IF NOT EXISTS `city` (
  `city_id` int(11) NOT NULL,
  `code` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE IF NOT EXISTS `people` (
  `people_id` int(11) NOT NULL,
  `city_id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  `age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
ALTER TABLE `city`
  ADD PRIMARY KEY (`city_id`);
ALTER TABLE `people`
  ADD PRIMARY KEY (`people_id`), ADD KEY `city_id` (`city_id`);
ALTER TABLE `people`
ADD CONSTRAINT `people_ibfk_1` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`);

这是我在expressjs中使用书架的代码:

var City = bookshelf.Model.extend({
    tableName: 'city'
});
var User = bookshelf.Model.extend({
  tableName: 'people',
  city: function(){
    return this.hasOne(City, 'city_id');
  }
});

这是我如何运行查询的示例代码:

new User().where({people_id: req.params.id })
.city()
.fetch()
.then(function(user){
    res.send(user.toJSON());
})
.catch(function(error){
    res.send(error);
});

然而,当我运行应用程序时,我只得到一个空的json:

{}

我已经在书架中启用了调试模式,这是它试图执行的查询:

 { __cid: '__cid1',
   method: 'select',
   options: undefined,
   bindings: [ undefined, 1 ],
   sql: 'select `city`.* from `city` where `city`.`city_id` = ? limit ?' }

正如我所说的,我对书架还是个新手。但这毫无意义;为什么它不比较city.city_id和person.city_id(外键)?

感谢您的时间和回答!

您可以通过以下操作使其工作:

1.)将主键主键重命名为id。主键应该是city.id,而不是city.city_id

2.)将用户定义中的关系更改为return this.belongsTo(City);

3.)您可以通过执行new User({id: 1}).fetch({ withRelated: ['city'] }); 来访问城市

相关文章: