Knex: Sélectionner la colonne calculée ?

Créé le 18 déc. 2014  ·  3Commentaires  ·  Source: knex/knex

J'essaie d'écrire une requête à l'aide de l'extension postgresql earthdistance et je souhaite renvoyer une colonne calculée, mais j'obtiens toujours une erreur à propos de : l'entrée FROM-clause manquante pour la table "670906,-79". C'est probablement parce que l'analyseur pense qu'un point sépare un nom de table d'un nom de colonne, mais dans mon cas, j'effectue un calcul (voir l'exemple de requête ci-dessous). Y a-t-il un moyen de contourner cela?

Possibly unhandled error: missing FROM-clause entry for table "670906,-79"
    at Connection.parseE (/usr/local/lib/node_modules/pg/lib/connection.js:534:11)
    at Connection.parseMessage (/usr/local/lib/node_modules/pg/lib/connection.js:361:17)
    at Socket.<anonymous> (/usr/local/lib/node_modules/pg/lib/connection.js:105:22)
    at Socket.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:764:14)
    at Socket.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:426:10)
    at emitReadable (_stream_readable.js:422:5)
    at readableAddChunk (_stream_readable.js:165:9)
    at Socket.Readable.push (_stream_readable.js:127:10)
  var columns = [
    'id',
    '(earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance)'
  ];
  var result = knex
    .select(columns)
    .from('stores')
    .whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])
question

Commentaire le plus utile

Vous devez utiliser knex.raw pour votre colonne calculée, afin qu'elle ne soit pas citée. Les éléments suivants devraient fonctionner :

var columns = [
  'id',
  knex.raw('earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance')
];
var result = knex
.select(columns)
.from('stores')
.whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])

Tous les 3 commentaires

Vous devez utiliser knex.raw pour votre colonne calculée, afin qu'elle ne soit pas citée. Les éléments suivants devraient fonctionner :

var columns = [
  'id',
  knex.raw('earth_distance(ll_to_earth(lat, lng), ll_to_earth(43.670906, -79.393331)) as distance')
];
var result = knex
.select(columns)
.from('stores')
.whereRaw('earth_box(ll_to_earth(43.670906, -79.393331), ?) @> ll_to_earth(lat, lng)', [radiusInStatuteMiles])

Merci! Exactement ce dont j'avais besoin. D'une manière ou d'une autre, je n'ai pas pensé à utiliser knex.raw .

De rien!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

mishitpatel picture mishitpatel  ·  3Commentaires

aj0strow picture aj0strow  ·  3Commentaires

mtom55 picture mtom55  ·  3Commentaires

olaferlandsen picture olaferlandsen  ·  3Commentaires

mattgrande picture mattgrande  ·  3Commentaires