Javascript 用书架查询
我最近开始使用书架。文档中的示例对我来说不是很清楚。这就是一个这样的例子:Javascript 用书架查询,javascript,rdbms,knex.js,bookshelf.js,Javascript,Rdbms,Knex.js,Bookshelf.js,我最近开始使用书架。文档中的示例对我来说不是很清楚。这就是一个这样的例子: var knex = require('knex')({ client: 'mysql', connection: process.env.MYSQL_DATABASE_CONNECTION }); var bookshelf = require('bookshelf')(knex); var User = bookshelf.Model.extend({ tableName: 'users', pos
var knex = require('knex')({
client: 'mysql',
connection: process.env.MYSQL_DATABASE_CONNECTION
});
var bookshelf = require('bookshelf')(knex);
var User = bookshelf.Model.extend({
tableName: 'users',
posts: function() {
return this.hasMany(Posts);
}
});
var Posts = bookshelf.Model.extend({
tableName: 'messages',
tags: function() {
return this.belongsToMany(Tag);
}
});
var Tag = bookshelf.Model.extend({
tableName: 'tags'
})
User.where('id', 1).fetch({
withRelated: ['posts.tags']
}).then(function(user) {
console.log(user.related('posts').toJSON());
}).catch(function(err) {
console.error(err);
});
在创建三个模型(用户、帖子和标签)之后,会有一个查询
User.where('id', 1).fetch({withRelated: ['posts.tags']}).then(function(user) {
console.log(user.related('posts').toJSON());
}).catch(function(err) {
console.error(err);
});
,“posts.tags”
,用户相关的('posts')
?谁能用最简单的形式告诉我,这些术语是什么,它们来自哪里
这些问题都在文档中得到了解答,尽管并非所有问题都在同一个地方,所以我可以理解您的困惑。你真的必须通读整件事才能更好地理解它 从: withRelated:使用模型实例检索关系。可以将单个属性的一个或多个关系名称(…)或属性数组指定为withRelated属性的值 发件人: 可以指定withRelated选项来获取集合的模型,立即加载模型上指定的任何关系 发件人: 嵌套的即时加载可以通过使用
分隔嵌套关系来指定
发件人:
related方法返回在模型的relations散列上加载的指定关系,或者调用关联的relations方法并将其添加到relations散列(如果存在并且尚未加载)
所有这些都涉及到在模型上急切地加载关系
这些方法所做的是从以某种方式与父模型的表相关的表中加载一些数据。在您发布的示例中,用户模型有一些帖子,帖子本身也有一些标记,因此关系类似于:
User
|_ Post
|_ Tag
这些表示为每个模型上的方法,例如,在用户模型中,posts:function(){…}
当您使用with related
指定与急切加载的关系时,您将使用这些方法名称。此外,您还可以通过使用
分隔深度嵌套的关系来加载它们,这就是您在示例中看到的
因此,将所有内容放在一起,该示例所做的是搜索id=1的用户,并检索属于该用户的所有帖子以及属于该用户的所有帖子的所有标签
然后使用模型的
相关('something')
方法访问这些相关对象。文档中已经给出了所有答案,尽管并非所有内容都在同一个位置,因此我可以理解您的困惑。你真的必须通读整件事才能更好地理解它
从:
withRelated:使用模型实例检索关系。可以将单个属性的一个或多个关系名称(…)或属性数组指定为withRelated属性的值
发件人:
可以指定withRelated选项来获取集合的模型,立即加载模型上指定的任何关系
发件人:
嵌套的即时加载可以通过使用
分隔嵌套关系来指定
发件人:
related方法返回在模型的relations散列上加载的指定关系,或者调用关联的relations方法并将其添加到relations散列(如果存在并且尚未加载)
所有这些都涉及到在模型上急切地加载关系
这些方法所做的是从以某种方式与父模型的表相关的表中加载一些数据。在您发布的示例中,用户模型有一些帖子,帖子本身也有一些标记,因此关系类似于:
User
|_ Post
|_ Tag
这些表示为每个模型上的方法,例如,在用户模型中,posts:function(){…}
当您使用with related
指定与急切加载的关系时,您将使用这些方法名称。此外,您还可以通过使用
分隔深度嵌套的关系来加载它们,这就是您在示例中看到的
因此,将所有内容放在一起,该示例所做的是搜索id=1的用户,并检索属于该用户的所有帖子以及属于该用户的所有帖子的所有标签
然后使用模型的
related('something')
方法访问这些相关对象。是的,我必须阅读整个文档。但这太令人困惑了,解释也不妥当。顺便说一句,回答得很好,谢谢。是的,我必须阅读整个文档。但这太令人困惑了,解释也不妥当。顺便说一下,回答得很好,谢谢。谢谢你改进了我的问题@谢谢你改进我的问题@德维乌斯