我有两个桌子。用户是父表,叶子是子表。每个用户都有一个以上的请假请求。users.id是主键,而leaves.userID是外键。我想获取每个休假记录的相关用户记录。
这里是用户模型
import bookshelf from '../config/bookshelf';
const TABLE_NAME = 'users';
/**
* User model.
*/
class User extends bookshelf.Model {
/**
* Get table name.
*/
get tableName() {
return TABLE_NAME;
}
/**
* Table has timestamps.
*/
get hasTimestamps() {
return true;
}
verifyPassword(password) {
return this.get('password') === password;
}
}
export default User;
这里是树叶模型
import bookshelf from '../config/bookshelf';
const TABLE_NAME = 'leaves';
/**
* Client model.
*/
class leaves extends bookshelf.Model {
/**
* Get table name.
*/
get tableName() {
return TABLE_NAME;
}
/**
* Table has timestamps.
*/
get hasTimestamps() {
return true;
}
verifyPassword(password) {
return this.get('password') === password;
}
}
export default leaves;
这是我的代码来获取叶子记录。
leaves.forge()
.fetchAll()
.then(leaves => res.json({
error: false,
data: leaves.toJSON()
})
)
.catch(err => res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
error: err
})
);
除非绝对必要,否则我建议您不要在您的应用程序代码中执行此类功能。您要问的是在数据世界中非常基本的内容,您的DBMS将更有能力处理此类请求。无需通过应卸载到DBMS的请求来减慢您的应用程序的速度。这就是DBMS的用途。不要重新发明轮子。
如果您的DBMS支持视图,则创建一个视图以执行此功能。您也可以在存储过程中执行此操作。这是一个非常简单的JOIN查询,只需3行SQL代码即可完成。拥有View后,您的应用程序可以像从其他任何表中一样从中读取数据。