风帆政策 – 通过协会进行search

比方说,我有一个模型用户 ,可以有多个房屋 。 这些房子可以有多个停车位 ,然后可以有多辆汽车自行车

用户>房屋>停车位> [汽车,自行车]

如何检查汽车是否与用户有关?

比方说,当一个用户(当前login的用户)想要编辑或删除一辆车时,我想检查他是否是该车的主人。 当他想要在房子或停车位上进行操作时也是如此。

由于模型用户并不直接与模型车或停车位相关联,因此检查对象是否与用户有关的最佳方法是什么? 有什么方法可以查找“一级协会”?

提前致谢

丹尼斯

如果汽车或自行车只能由一个用户拥有,那么您可以随时在汽车中添加一个用户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 " 

我想你在你的模型中定义了所有这些一对多的关系 。

那么你有一切都find与汽车相关的用户:

  • 从车里取回停车位
  • 当你有停车场时,找回房子
  • 当你有房子,你可以检索用户

这里是一个使用callback的简单例子:

 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 }); }); }); 

为了减less调用次数,可以使用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以不同的方式组织asynchronous代码。