私は、sequelize を介して postgres db を介して Feathersjs/nodejs を使用してきました。私のデータベースには、Users テーブルと Events テーブルがあります。それらは2倍の関係にあります:
events.belongsTo(models.users, {
foreignKey: {
name: 'creatorId',
allowNull: false
},
onDelete: 'CASCADE',
as: 'creator'
});
events.belongsToMany(models.users, {
through: 'event_participants',
as: 'participants',
foreignKey: 'eventId',
otherKey: 'userId'
});
models.users.belongsToMany(events, {
through: 'event_participants',
as: 'events'
});
すべてが正常に機能し、テーブルが作成され、インクルードを使用して、ユーザーをイベント内に参加者として取得します。問題は関連付けによるクエリです。現在のユーザーのイベントを取得しようとしているので、作成者が現在のユーザーであるイベントと、参加者の 1 人が現在のユーザーであるイベントが必要です。問題は、「現在のユーザーが参加者の 1 人であるクエリ」の 2 番目の部分です。私はこのようなものを期待していました
'api/events?$or[0][creatorId]=currUserId&$or[1][participants][$contains]=currUserId'
しかし、「参加者」などの列が含まれていないため、クエリを実行できません。したがって、今のところ、すべてのイベントを取得し、現在のユーザーのアフター フックでそれらをフィルタリングしていますが、それは間違っているようです。これを行う正しい方法は何ですか?
そして、ユーザーをユーザーに含めて取得することで、ユーザーが参加者の1人であるイベントを取得できることはわかっていますが、そのデータをまとめて並べ替えることができず、個別に並べ替えられ、別の問題がフロントエンドでページネーションを行うことです。