风帆政策 – 通过协会进行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代码。
- JavaScript不加载HTML文件 – nodejs + expressjs
- JavaScript:直接代码与CPS风格的生成代码性能比较
- NodeJS:内存使用增长在recursion刮擦直到崩溃
- 什么是替代JSONPath({json:obj,path:path,callback:callback})函数在nodejs
- TypeError:无法读取未定义的属性'_locals'
- 从CoffeeScript调用JavaScript“new”
- 如何让CORS与Node.js(不使用Express)
- 创build并发送Zip文件 – NODE JS
- 如何在Nodejs应用程序中共享configurationvariables