2016-11-10 8 views
0

Sequelizeに組み込まれたORMの便利な組み込み構文を生のPostGISクエリで使用しようとしています。sequelizeを使用した組み込みPostGISクエリの実行方法

この呼び出しが正しく、私はそれを必要なだけのように関連promotionImageとカテゴリのテーブルを結合するが、それは私がそれを必要とするように私のデータベースを照会地理ません。一方、このクエリは正しく

promotion.findAll({ 
    include: [{ 
     model: promotionImage 
    }, { 
     model: category 
    }] 
    }).then(promoters => { 
    res.json(promoters) 
    }).catch(err => { 
    console.log('ERROR: ', err) 
    }) 

LNGの境界/ LAT提供中の「プロモーション」を見つけたが、それは正しく関連付けられpromotionImageとカテゴリテーブルを結合しません:

const query = '\ 
     SELECT * \ 
     FROM "promotions" \ 
     WHERE "promotions"."location" && ST_MakeEnvelope(:southWestLng, :southWestLat, :northEastLng, :northEastLat)' 
    replacements = { 
     southWestLng, 
     southWestLat, 
     northEastLng, 
     northEastLat 
    } 

    db.sequelize.query(query, { 
    replacements, 
    type: sequelize.QueryTypes.SELECT, 
    model: promotion, 
    include: [{ 
     model: promotionImage 
    }, { 
     model: category 
    }] 
    }).then(promoters => { 
    res.json(promoters) 
    }).catch(err => { 
    console.log('ERROR: ', err) 
    }) 

ST_MakeEnvelope構文を使用して、両方のクエリに方法はあるとのデータが含まれます他のモデル続行し、後にGIS?

答えて

1

Sequelize.query()includeをサポートしていない、あなたの答えは私が実際に近い得たように見えますfindAll

promotion.findAll({ 
    where: { 
     location: { 
      $overlap: db.sequelize.fn('ST_MakeEnvelope', southWestLng, southWestLat, northEastLng, northEastLat) 
     } 
    }, 
    include: [{ 
     model: promotionImage 
    }, { 
     model: category 
    }] 
    }).then(promoters => { 
    res.json(promoters) 
    }).catch(err => { 
    console.log('ERROR: ', err) 
    }) 
+0

Sequelize.fn()を使用することができます。しかし、結果は返ってこない。私は問題はpostGISクエリが '= '記号ではなく、代わりに' && 'を持つと仮定していると思います。あなたの答えは、 '' WHERE "promotion"。 "location" = ST_MakeEnvelope(... '' WHERE "'プロモーション" "であるはずです)" "location" && ST_MakeEnvelope(... ' – Scott

+1

私はそれを逃しました、私は自分の答えを編集@Scott –

関連する問題