- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我之所以感到困惑,是因为我是一名 PHP 开发人员并且经常使用 Laravel 和 FuelPHP
我真正不明白的是它自己的联想。
我的意思是,我想创建一个基本的 hasOne/BelongsTo 逻辑,如下所示
用户有一个个人资料
个人资料属于用户
我已经习惯了下面的构建(Laravel 风格)
用户表
id | username | email | password
---------------------------------------
1 | My Username | My email | 1234568
Users_profile 表
user_id | first_name | last_name
----------------------------------------
1 | My First name | My Last name
然后我就这样定义了模型
用户模型
class Users extends Eloquent
{
public function profile()
{
return $this->hasOne('profile');
}
}
个人资料模型
class Profile extends Eloquent
{
protected $tableName = 'users_profile';
protected $primaryKey = 'user_id';
public function user()
{
return $this->belongsTo('User');
}
}
它确实有效,因为 return $this->hasOne('profile');
会自动检查 user_id
在 Sails.js 中尝试了同样的方法(以 sails 的方式)
用户模型
module.exports = {
attributes: {
username: {
type: 'string',
unique: true,
required: true
},
email: {
type: 'string',
unique: true,
email: true,
required: true
},
password: {
type: 'string',
required: true
},
profile: {
model: "profile",
}
},
};
个人资料模型
module.exports = {
tableName: 'user_profile',
autoPK: false,
autoCreatedAt: false,
autoUpdateddAt: false,
attributes: {
user_id: {
type: 'integer',
primaryKey: true
},
first_name: {
type: 'string',
},
last_name: {
type: 'string',
},
user: {
model: "user"
}
}
};
现在从文档中读取我必须以这种方式更新我的表
id | username | email | password | profile
-------------------------------------------------
1 | My Username | My email | 1234568 | 1
user_id | first_name | last_name | user |
-----------------------------------------------
1 | My First name | My Last name | 1
所以我需要再存储 2 个 ID,但我真的不明白为什么。
比我进一步阅读尝试使用 via
没有用(注意这是为了收藏)
那么,有人可以给我一个 Laravelis 风格的逻辑示例吗?
在文档中对此一无所知(一种更简单的方法),因为在我看来,如果用户有更多的关系,这将导致 ID hell (只是我的意见)
最佳答案
这是一个known issue Sails 不完全支持一对一关联;您必须在您希望能够从中填充的任何一侧设置外键。也就是说,如果您想将 User
#1 链接到 Profile
#1 并且能够执行 User.find(1).populate('profile' )
,您将设置 User
#1 的 profile
属性,但这并不自动意味着执行 Profile.find(1)。 populate('user')
将起作用。这与 Sails 中的多对多 关系相反,后者在一侧添加链接就足够了。这是因为对多 关系使用连接表,而对一 关系不使用。
这在 Sails 中不是优先考虑的原因是一对一关系通常不是很有用。除非你有 really compelling reason如果不这样做,最好将两个模型合并为一个。
无论如何,如果这是您真正需要的东西,您可以使用 .afterCreate
lifecycle callback确保双向链接,例如在 User.js
中:
module.exports = {
attributes: {...},
afterCreate: function(values, cb) {
// If a profile ID was specified, or a profile was created
// along with the user...
if (values.profile) {
// Update the profile in question with the user's ID
return Profile.update({id: values.profile}, {user: values.id}).exec(cb);
}
// Otherwise just return
return cb();
}
};
您可以将类似的 .afterCreate()
添加到 Profile.js
以在创建配置文件时处理更新受影响的用户。
关于node.js - 我对 Sails.js 水线一对一关联逻辑感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744179/
我有以下模型测试 module.exports = { attributes: { a: { type: 'number' },
我有视频模型: module.exports = { attributes: { id: 'string', tags: 'array' }, } 我想找到所有带有标签的视频,
我有这些模型: // Material.js module.exports = { attributes: { name: { type: 'string',
我想知道在 SpriteKit 中创建水线的最佳方法是什么甚至在 SceneKit (如果这是一个更好的选择)? 我所说的水线是指在 2D 游戏中指示水位的动画波浪线——例如游戏“跳鱼”或“鱼出水”游
我正在使用带有 sails.js 的 mongodb 查询包含 torrent 文件标题的模型。但我无法使用“AND”条件执行水线查询。我已经尝试过多种方法,但大多数方法返回空值或根本不返回。 例如数
我的一些模型没有 id 作为主键,我需要知道给定模型的主键名称,但我找不到执行此操作的方法。我在waterline文档和源代码中进行了搜索,但我在源代码中发现的所有内容是它们正在使用attribute
假设我有 2 个模型。 用户和俱乐部。 为了简化我的问题,假设用户只有 Id 而俱乐部有 ClubId 和 UserId,因此一个俱乐部可以有许多不同的用户。 这是我的问题: 例如,当我删除 ID 为
因此,我正在使用 SailsJS 创建一个小型应用程序。我的数据库是MySQL。当我测试时,首先我创建一个“市场”记录,然后创建一个链接到“市场”的“股票”记录,在另一时刻,我检索该股票记录。 我有以
我正在开发一个包含多个(>2)表的 sails 应用程序,我需要在填充方法的帮助下加入这些表例如 Category.js 模型 attributes: { CategoryID:{
我有两个模型 - 用户和标签。用户模型的一部分 module.exports = { attributes: { tags: { collection:
使用 sails.js (0.10.5): 我不知道如何使用水线/风 sails 实现 groupBy/计数。我想要的是: SELECT customer_id, COUNT('') FROM cus
我是 Sails.js (v0.10.5) 和 Waterline ORM 的新手。我在数据库中有 3 个表:用户(id,名称),角色(id,别名)和连接表 users_roles(user_id,r
我正在将 Waterline ORM 用于sails.js。 limit和 sort使用 groupby 时不起作用,但是当您不进行任何分组时工作正常。 例如 Model.find({ gro
我正在使用 Sails.js(waterline orm)制作 API 我需要但无法完成的是从表(模型)中过滤结果,在包括嵌套字段在内的所有字段中进行搜索: 即: GET/users/?filter=
如何执行此查询? SELECT * FROM blog GROUP BY MONTH(createdAt) 我尝试过的: Blog.find() .groupBy({MONTH:'createdAt'
我想从模型中获取新 行。在给定日期之后创建的行。查询应该很简单: 其中 updatedAt>= givenDate 但它不起作用:( 我的代码: // Date from client
我正在尝试使用 Sails.js 和 Waterline.js 在现有 Mongo 数据库之上构建应用程序。问题是当我启动服务器时它说 $ sails lift error: Hook failed
我已经为我的模型之一中的字段之一设置了验证规则 maxLength,如果我的输入太长,它会被 sails.js 识别。我的问题是,如果我检查数据库,它会显示 mysql 数据库的字段长度为 255。我
我试图仅获取与我的站点模型关联的标签的序列号。这就是我正在做的事情: const site = await Site.findOne({ id: siteId }).populate('tag
我将 Waterline 与 Sails.js 结合使用。 我想要一个具有参与的用户。一个事件可以有多个参与。 参与具有状态。 我的用户类别: module.exports = { attribute
我是一名优秀的程序员,十分优秀!