Reputation: 13
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)
Upvotes: 0
Views: 374
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