我想弄清楚如何创建一个“存储库”文件(对于 symfony2 用户),我将在其中放置我所有的特殊行为查询。
我有一个简单的 db shema :
- 用户(电子邮件)
- 关系类型(名称)
- UserXUserXRelation(从用户、到用户、关系)
我想检索与我的用户 Y 有关系 X 的用户,所以在 sql 中它看起来像:
var sql = 'SELECT u.email, u.id
FROM user u
INNER JOIN UserXUser uxu ON uxu.toUser_id = u.id
WHERE uxu.relation_id = 1 AND uxu.fromUser_id = '+id
我应该在哪里创建这个方法?我在 db/shema.js 和 app/models/user.js 中尝试但没有成功。 我在这里找到Using arbitrary mySQL Query with JugglingDB?我应该使用 shema 对象来使用“查询”,在哪里以及如何使用它?
回调看起来像这样吗:
function(err, data) {...}
在这种情况下是否有一些关于代码分离的最佳实践?
附加问题:有没有办法通过 PHP PDO 方式与 jugglingdb 绑定(bind)参数?
谢谢大家。
最佳答案
可以使用 jugglingdb 和 compoundjs 执行任意查询。如果您使用的是 compoundjs,则只需使用 compound.models.user.schema.adapter.query()
。复合对象应该被解析到您的用户模型中,这意味着您可以访问许多其他方法。在模型中使用此查询的方式是使用以下代码在用户模型中创建一个方法:
var sql = 'SELECT u.email, u.id
FROM user u
INNER JOIN UserXUser uxu ON uxu.toUser_id = u.id
WHERE uxu.relation_id = 1 AND uxu.fromUser_id = '+id
compound.models.user.schema.adapter.query(sql, function(err, data) {
if(error) {
console.log(error)
} else {
//Enjoy your data
}
})
由于这会覆盖 jugglingdb 引号转义器,因此请注意 sql 注入(inject),确保检查并清理您的 id 变量。
关于mysql - JugglingDB 自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429825/