Last active
August 29, 2015 14:26
-
-
Save simong/7c6cf085e4753ee3b096 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Activity.belongsTo(Asset); | |
Asset.hasMany(Activity); | |
Asset.belongsToMany(User, {'as': 'users', 'through': 'asset_users'}); | |
User.belongsToMany(Asset, {'as': 'assets', 'through': 'asset_users'}); | |
// Query: | |
// Get all the assets that belong to user X AND check whether there is a like or dislike activity for the current user (can only be 1) | |
var queryOptions = { | |
'order': [['id', 'DESC']], | |
'limit': 10, | |
'offset': 0, | |
'include': [ | |
{ | |
'model': DB.Activity, | |
'attributes': ['type'], | |
'required': false, | |
'where': { | |
'user_id': currentUserId, | |
'type': ['like', 'dislike'] | |
} | |
}, | |
{ | |
'model': DB.User, | |
'where': { | |
'id': someUserId | |
}, | |
'required': true | |
'as': 'users' | |
} | |
] | |
}; | |
// What I want | |
SELECT "asset"."id", "asset"."type", "asset"."url", "asset"."download_url", "asset"."title", "asset"."canvas_assignment_id", "asset"."description", "asset"."thumbnail_url", "asset"."embed_code", "asset"."mime", "asset"."source", "asset"."body", "asset"."likes", "asset"."dislikes", "asset"."views", "asset"."comment_count", "asset"."created_at", "asset"."updated_at", "asset"."deleted_at", "asset"."course_id" | |
FROM "assets" AS "asset" | |
LEFT OUTER JOIN "activities" AS "activities" ON "asset"."id" = "activities"."asset_id" AND "activities"."course_id" = 1 AND "activities"."user_id" = 1 AND "activities"."type" IN ('like', 'dislike') AND "activities"."object_type" = 'asset' | |
INNER JOIN ("asset_users" AS "users.asset_users" INNER JOIN "users" AS "users" ON "users"."id" = "users.asset_users"."user_id") ON "asset"."id" = "users.asset_users"."asset_id" AND "users"."id" = 4 | |
WHERE ("asset"."deleted_at" IS NULL AND ("asset"."course_id" = 1)) | |
ORDER BY "asset"."id" DESC | |
LIMIT 10 | |
// What I get, notice the limit in the subquery | |
SELECT "asset".*, "activities"."id" AS "activities.id", "activities"."type" AS "activities.type", "users"."id" AS "users.id", "users"."canvas_user_id" AS "users.canvas_user_id", "users"."canvas_course_role" AS "users.canvas_course_role", "users"."canvas_enrollment_state" AS "users.canvas_enrollment_state", "users"."canvas_full_name" AS "users.canvas_full_name", "users"."canvas_image" AS "users.canvas_image", "users.asset_users"."created_at" AS "users.asset_users.created_at", "users.asset_users"."updated_at" AS "users.asset_users.updated_at", "users.asset_users"."user_id" AS "users.asset_users.user_id", "users.asset_users"."asset_id" AS "users.asset_users.asset_id" FROM | |
(SELECT "asset"."id", "asset"."type", "asset"."url", "asset"."download_url", "asset"."title", "asset"."canvas_assignment_id", "asset"."description", "asset"."thumbnail_url", "asset"."embed_code", "asset"."mime", "asset"."source", "asset"."body", "asset"."likes", "asset"."dislikes", "asset"."views", "asset"."comment_count", "asset"."created_at", "asset"."updated_at", "asset"."deleted_at", "asset"."course_id" FROM "assets" AS "asset" WHERE ("asset"."deleted_at" IS NULL AND ("asset"."course_id" = 1)) ORDER BY "asset"."id" DESC LIMIT 10) AS "asset" | |
LEFT OUTER JOIN "activities" AS "activities" ON "asset"."id" = "activities"."asset_id" AND "activities"."course_id" = 1 AND "activities"."user_id" = 1 AND "activities"."type" IN ('like', 'dislike') AND "activities"."object_type" = 'asset' | |
INNER JOIN ("asset_users" AS "users.asset_users" INNER JOIN "users" AS "users" ON "users"."id" = "users.asset_users"."user_id") ON "asset"."id" = "users.asset_users"."asset_id" AND "users"."id" = 4 | |
ORDER BY "asset"."id" DESC; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment