Diego Vasquez
Diego Vasquez

Reputation: 13

Knex not returning join SQL query

function list() {
  return knex('restaurants')
    .join('owners', 'restaurants.owner_id', 'owners.owner_id')
    .select('restaurants.restaurant_name', 'owners.owner.name', 'owners.email')
    .orderBy('owners.owner_name');
}

function listAverageRatingByOwner() {
  return knex('restaurants')
    .join('owners', 'restaurants.owner_id', 'owners.owner_id')
    .select('owners.owner_name')
    .avg('restaurants.ratings');
}

In controller:

async function listAverageRatingByOwner(req, res, next) {
  const averageRatingByOwner = service.listAverageRatingByOwner();
  console.log(averageRatingByOwner);
  res.json();
}

I'm not sure why it doesn't return the join query result and instead returns that.

Restaurants table: restaurant_id (primary key) restaurant_name (required string) cuisine (required string) address (required string) rating (optional numeric) owner_id (required foreign key)

Owners table: owner_id (primary key) owner_name (required string) email (required string) address (required string)

console.log result

Upvotes: 0

Views: 374

Answers (1)

felixmosh
felixmosh

Reputation: 35503

Knex query builder returns a Promise, therefore you should await it in order to get your result set.

// controller

async function listAverageRatingByOwner(req, res, next) {
  const averageRatingByOwner = await service.listAverageRatingByOwner();
  // ---------------------------^
  console.log(averageRatingByOwner);
  res.json();
}

Upvotes: 1

Related Questions