Bookshelf.js – hasOne关系不好
我对bookshelf.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,使用bookshelf:
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:
{}
我已经启用了书架上的debugging模式,这是它试图执行的查询:
{ __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'] });
访问城市new User({id: 1}).fetch({ withRelated: ['city'] });
- 在testingnodeJS应用程序时,应该如何设置Capybara.app?
- Mongoose子文档插入到另一个集合中,同时在父模式中保持关系
- 会话pipe理,Node + Express和Mongoose模式对象
- 自定义(用户友好)ValidatorError消息
- package.json必须是实际的JSON,而不仅仅是JavaScript
- 使用几个关键字searchmongodb
- 我应该使用什么express.cookieParser()秘密?
- Passport.js不传递用户请求在req.login()
- 通过使用body parser,node js的POST方法将一个variables从HTML表单传递到mongodb查询中