【问题标题】:How to do raw query in Bookshelf.js如何在 Bookshelf.js 中进行原始查询
【发布时间】:2014-05-30 10:59:01
【问题描述】:

我想实现这个

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

来自https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=fr#createtable

如何使用 Bookshelf 进行此查询。

我现在有这个:

var raw = '( 3959 * acos( cos( radians(37) ) * cos( radians( '+ req.params.lat + ' ) ) * cos( radians( '+req.params.lng+' ) - radians(-122) ) + sin( radians(37) ) * sin( radians( '+req.body.lng+' ) ) ) ) AS distance';


new Places().query(function(qb) {
    qb.where('lat',req.params.lat); 
    qb.where('lng',req.params.lng); 
    qb.column(raw);
    qb.having('distance', '>', 25);
}).fetch({ debug: false }).then(function(collection) {
    console.log(collection);

    if (collection === undefined) {
        // no such result
        res.json(404,{error: "No Places found."});
    } else {
        // found, list json
        res.json(200, collection);
    }
});

【问题讨论】:

    标签: bookshelf.js knex.js


    【解决方案1】:

    我发现这可以工作.. 不需要 qb. 实例/参考:

    var Bookshelf = require('bookshelf').mysqlAuth;
    
    var rawSql = 'SELECT .. <etc>';
    
    Bookshelf.knex.raw(rawSql).then(..);
    

    【讨论】:

      【解决方案2】:

      它。

      qb.column(qb.knex.raw(raw));
      

      【讨论】:

        【解决方案3】:

        我试过这样的东西,效果很好

        return **Location**.query(qb => {
              return ***query***
            })
            .fetchAll()
            .then(data => data.toJSON());
        

        与:

        • Location是一个模型(我在strapi services里面做)

        • 查询可以是任何原始查询。

        【讨论】:

          猜你喜欢
          • 2017-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-24
          • 2017-05-09
          • 1970-01-01
          • 2021-12-10
          相关资源
          最近更新 更多