假设我有一个模型用户,可以有多个房屋。这些房屋可以有多个停车位,然后可以有多个汽车或自行车
用户>房屋>停车位> [汽车,自行车]
如何检查汽车是否与用户相关?
比方说,例如,当用户(当前登录的用户)想要编辑或删除汽车时,我想检查他是否是该汽车的所有者。当他想在房子或停车位上进行动作时也是如此。
由于模型用户不直接与模型车或停车位相关联,检查对象是否与用户相关的最佳方法是什么? 有没有办法查找“第一级协会”?
提前致谢
丹尼斯
答案 0 :(得分:1)
如果汽车或自行车只能由一个用户拥有,您可以随时在汽车中添加用户ID关联模型并从那里开始工作,否则您可以使用大量子查询进行硬SQL查询:
"SELECT car.name, car.id, car.parkingspot FROM cars, parkingspots, houses, users WHERE
car.parkingspotID = parkingspot.ID
AND
parkingspot.houseID = house.ID
AND
house.userID = MY_USERID
"
答案 1 :(得分:1)
我猜您在模型中定义了所有这些one-to-many relations。
然后你就可以找到与汽车相关的用户:
以下是使用回调的简单示例:
Car.findOne({id: 1}).exec(function(err, car) {
Parking.findOne({id: car.parking}).exec(function(err, parking) {
House.findOne({id: parking.house}).exec(function(err, house) {
res.json(house.user); // <= returns the user id
});
});
});
要减少通话次数,您可以使用populate()
方法:
Car.findOne({id: 1}).populate('parking').exec(function(err, car) {
House.findOne({id: car.parking.house}).populate('user').exec(function(err, house) {
res.json(house.user); // returns the user object
});
});
您还可以使用promise API以不同方式组织异步代码。