- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 PostgreSQL 上使用 Sequelize 来存储属于组织的用户。组织拥有用户可以访问的设备。因此,从本质上讲,用户也通过他们的组织拥有设备。
我将其设置为每个设备都使用 organization_id 与一个组织相关联,每个用户都使用 organization_id 与一个组织相关联。我正在尝试使用 Sequelize 进行设置以正确阅读它。我正在尽最大努力不诉诸于编写自定义查询,但如果我最终不得不这样做也没关系。
我正在尝试获取与用户 ID 关联的所有设备。当我尝试运行 findAll(...) 命令时,Sequelize 打印出这个疯狂的查询并出错。它输出这个查询,然后输出一个空集:
SELECT
"receiver"."receiver_id" AS "id",
"receiver"."organization_id" AS "organizationID",
"receiver"."identifier",
"receiver"."secret",
"receiver"."iterations",
"receiver"."sodium",
"receiver"."algorithm",
"receiver"."created",
"receiver"."modified",
"receiver"."deleted",
"receiver"."organization_id",
"users"."user_id" AS "users.id",
"users"."password" AS "users.password",
"users"."sodium" AS "users.sodium",
"users"."email" AS "users.email",
"users"."organization_id" AS "users.organizationID",
"users"."iterations" AS "users.iterations",
"users"."algorithm" AS "users.algorithm",
"users"."created" AS "users.created",
"users"."modified" AS "users.modified",
"users"."deleted" AS "users.deleted",
"users"."organization_id" AS "users.organization_id",
"users.organizations"."created" AS "users.organizations.created",
"users.organizations"."modified" AS "users.organizations.modified",
"users.organizations"."organization_id" AS "users.organizations.organization_id"
FROM "receivers" AS "receiver"
INNER JOIN (
"organizations" AS "users.organizations"
INNER JOIN "users" AS "users"
ON "users"."user_id" = "users.organizations"."organization_id")
ON "receiver"."receiver_id" = "users.organizations"."organization_id"
AND ("users"."deleted" IS NULL AND "users"."user_id" = 2)
WHERE "receiver"."deleted" IS NULL;
我怎样才能更好地编写定义或代码?
非常感谢。
我在 Sequelize 中的表定义:
var organization = sequelize.define( 'organization', {
'id': {
type: Sequelize.BIGINT,
field: 'organization_id',
allowNull: false,
primaryKey: true,
autoIncrement: true
},
'name' : {
type: Sequelize.STRING( 256 ),
field: 'name',
allowNull: false,
validate: {
notEmpty: true
}
}
}, {
'createdAt' : 'created',
'updatedAt' : 'modified',
'deletedAt' : 'deleted',
'tableName' : 'organizations',
'paranoid' : true
} );
var user = sequelize.define( 'user', {
'id': {
type: Sequelize.BIGINT,
field: 'user_id',
allowNull: false,
primaryKey: true,
autoIncrement: true
},
'password': {
type: Sequelize.STRING( 64 ),
field: 'password',
allowNull: false,
validate: {
notEmpty: true
}
},
'sodium': {
type: Sequelize.STRING( 64 ),
field: 'sodium',
allowNull: false,
validate: {
notEmpty: true
}
},
'email' : {
type: Sequelize.STRING( 64 ),
field: 'email',
allowNull: false,
validate: {
notEmpty: true
}
},
'organizationID' : {
type: Sequelize.BIGINT,
field: 'organization_id',
allowNull: false,
validate: {
notEmpty: true
}
},
'iterations' : {
type: Sequelize.INTEGER,
field: 'iterations',
allowNull: false,
validate: {
notEmpty: true
}
},
'algorithm' : {
type: Sequelize.STRING( 8 ),
field: 'algorithm',
allowNull: false,
defaultValue: 'sha256'
}
}, {
'createdAt' : 'created',
'updatedAt' : 'modified',
'deletedAt' : 'deleted',
'tableName' : 'users',
'paranoid' : true
} );
var receiver = sequelize.define( 'receiver', {
'id': {
type: Sequelize.BIGINT,
field: 'receiver_id',
allowNull: false,
primaryKey: true,
autoIncrement: true
},
'organizationID': {
type: Sequelize.BIGINT,
field: 'organization_id',
allowNull: false,
validate: {
notEmpty: true
}
},
'identifier': {
type: Sequelize.STRING( 64 ),
field: 'identifier',
allowNull: false,
validate: {
notEmpty: true
}
},
'secret' : {
type: Sequelize.STRING( 64 ),
field: 'secret',
allowNull: false,
validate: {
notEmpty: true
}
},
'iterations' : {
type: Sequelize.INTEGER,
field: 'iterations',
allowNull: false,
validate: {
notEmpty: true
}
},
'sodium': {
type: Sequelize.STRING( 64 ),
field: 'sodium',
allowNull: false,
validate: {
notEmpty: true
}
},
'algorithm' : {
type: Sequelize.STRING( 8 ),
field: 'algorithm',
allowNull: false,
defaultValue: 'sha256'
}
}, {
'createdAt' : 'created',
'updatedAt' : 'modified',
'deletedAt' : 'deleted',
'tableName' : 'receivers',
'paranoid' : true
} );
// Organizations have users and users have organizations
organization.hasMany( user, { 'foreignKey' : 'organization_id' } );
user.belongsTo( organization, { 'foreignKey' : 'organization_id' } );
// Organizations have receivers
organization.hasMany( receiver, { 'foreignKey' : 'organization_id' } );
receiver.belongsTo( organization, { 'foreignKey' : 'organization_id' } );
// Receivers to users
user.belongsToMany( receiver, { 'through' : 'organizations', 'foreignKey' : 'organization_id' } );
receiver.belongsToMany( user, { 'through' : 'organizations', 'foreignKey' : 'organization_id' } );
我用来查询的代码:
// Get the devices for this person
db.receiver.findAll( {
'include' : [
{
'model' : db.user,
'where' : { 'id' : 2 }
}
]
} )
.complete( function( error, result ) {
if( error ) {
console.log( error );
}
else {
console.log( result );
}
} );
最佳答案
尝试以下操作,它会选择与 where 语句匹配的用户,并包括与其关联的组织,而组织又包括与其关联的设备,因此您最终应该得到与用户关联的设备。
// Organizations have users
user.belongsTo(organization);
// Organizations have receivers
receiver.belongsTo(organization);
// Get the devices for this person
db.user.find( {
'include' : [
{model: db.organization,
include: [model: db.receiver]
}
]
'where' : { 'id' : 2 }
} )
.complete( function( error, result ) {
if( error ) {
console.log( error );
}
else {
console.log( result );
}
} );
如果您使用下划线 id 字段名称,如 organization_id,您可以在创建模型时指定“underscored: true”,这样您就不必在创建关联时指定外键字段。
关于sql - Sequelize belongsToMany 关联不通过表工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29781722/
我有两个模型:用户和经济事件。它们通过 UserEconomicActivity 关联(这是一个 BelongsToMany 关系)。在 User 模型中,我定义了这样的关联: this.belong
考虑下表: user id name client id name user_client user_id client_id rate ... 我希望我的 Contr
给定以下 belongsToMany 关系: 标签模型: class Tag extends Model { public function posts (){ return
假设我有以下模型: const Item = sequelize.define("Item", { active: { type: DataTypes.BOOLEAN, defaultValu
我使用了 Sequelize 并使用 belongsToMany() 设置了多对多关系。但是,当我查询出数据时,像这样: api.models.operator.find({ where:
在Laravel中定义多对多关系时,使用belongsToMany()或hasManyThrough()有什么区别? 例:UserAccountAccount_User 因此,用户通过Account_
我有两个带有数据透视表的表(用户和饮料),用户与配置文件表有 hasOne 关系,有没有办法将配置文件表附加到数据透视表并获取所有数据。 表格用户 id | name | email 表格配置文件 i
我有两个带有数据透视表的表(用户和饮料),用户与配置文件表有 hasOne 关系,有没有办法将配置文件表附加到数据透视表并获取所有数据。 表格用户 id | name | email 表格配置文件 i
我有两个表具有 belongsToMany 关系。数据透视表还包含一个名为 state 的列,它可以有 3 个不同的值。假设我的表是 Table1 和 Table2。 具有不同状态的相同Table1-
所以我有一个名为 thread_user 的数据透视表,并且有两个模型; User.php 和 Thread.php。 我的 User.php 文件中有这个: public function thre
我在 PostgreSQL 上使用 Sequelize 来存储属于组织的用户。组织拥有用户可以访问的设备。因此,从本质上讲,用户也通过他们的组织拥有设备。 我将其设置为每个设备都使用 organiza
我正在 Laravel 中实现多对多关系。这些实体是:用户角色和数据透视表 user_role Users ==== id name ..... roles ==== id role ... u
我试图建立多对多的关系,在这个例子中是用户和角色。 在用户模型中我得到了这个: public function roles() { return $this->belongsToMany('A
我有如下三个表: 用户 id|名称|用户名|密码 角色 编号|名称 用户角色 id|user_id|role_id 这些表通过 belongsToMany 进行通信。我想找到一种方法来选择“users
我的项目中有 belongsToMany 关系: 公共(public)函数产品() { 返回 $this->belongsToMany(Product::class,'order_products',
我有以下模型。 class Training extends \Eloquent { // Add your validation rules here public static $
所以我通过数据透视表 user_photo 在 Users 和 Photos 之间建立了多对多关系。我在我的用户模型中使用 belongsToMany('Photo')。然而,这里的问题是我的照片表中
我有这个给定的表结构: 如何使用 Eloquent 从我的“visita”类访问“curso.name”?我分配了多对多关系,但只能访问“turma.curso_id”,但我想得到类似 $visita
使用 sequelize,我期望这一行: m.User.belongsToMany(m.Company, {through: 'UserCompany'}); 在我的数据库中生成一个名为“user_c
我有两个表:categories 和 videos,然后我有一个数据透视表,因为它们是 belongsToMany 关系。 我想要做的是获取所有视频,其中没有一个视频实例属于多个类别之一。 例如 视频
我是一名优秀的程序员,十分优秀!