fix(db-mongodb): 4x and more level deep relationships querying (#12800)
Fixes https://github.com/payloadcms/payload/issues/12721
This commit is contained in:
@@ -254,6 +254,11 @@ export default buildConfigWithDefaults({
|
||||
relationTo: 'movies',
|
||||
hasMany: true,
|
||||
},
|
||||
{
|
||||
name: 'movie',
|
||||
type: 'relationship',
|
||||
relationTo: 'movies',
|
||||
},
|
||||
{
|
||||
name: 'directors',
|
||||
type: 'relationship',
|
||||
|
||||
@@ -17,7 +17,6 @@ import type {
|
||||
} from './payload-types.js'
|
||||
|
||||
import { initPayloadInt } from '../helpers/initPayloadInt.js'
|
||||
import { isMongoose } from '../helpers/isMongoose.js'
|
||||
import {
|
||||
chainedRelSlug,
|
||||
customIdNumberSlug,
|
||||
@@ -430,6 +429,33 @@ describe('Relationships', () => {
|
||||
expect(result.docs[0].id).toBe(id)
|
||||
})
|
||||
|
||||
it('should allow 4x deep querying', async () => {
|
||||
const movie_1 = await payload.create({
|
||||
collection: 'movies',
|
||||
data: { name: 'random_movie_1' },
|
||||
})
|
||||
const director_1 = await payload.create({
|
||||
collection: 'directors',
|
||||
data: { name: 'random_director_1', movie: movie_1.id },
|
||||
})
|
||||
const movie_2 = await payload.create({
|
||||
collection: 'movies',
|
||||
data: { name: 'random_movie_2', director: director_1.id },
|
||||
})
|
||||
const director_2 = await payload.create({
|
||||
collection: 'directors',
|
||||
data: { name: 'random_director_2', movie: movie_2.id },
|
||||
})
|
||||
|
||||
const res = await payload.find({
|
||||
collection: 'directors',
|
||||
where: { 'movie.director.movie.name': { equals: 'random_movie_1' } },
|
||||
})
|
||||
|
||||
expect(res.totalDocs).toBe(1)
|
||||
expect(res.docs[0].id).toBe(director_2.id)
|
||||
})
|
||||
|
||||
describe('hasMany relationships', () => {
|
||||
it('should retrieve totalDocs correctly with hasMany,', async () => {
|
||||
const movie1 = await payload.create({
|
||||
|
||||
@@ -280,6 +280,7 @@ export interface Director {
|
||||
name?: string | null;
|
||||
localized?: string | null;
|
||||
movies?: (string | Movie)[] | null;
|
||||
movie?: (string | null) | Movie;
|
||||
directors?: (string | Director)[] | null;
|
||||
updatedAt: string;
|
||||
createdAt: string;
|
||||
@@ -742,6 +743,7 @@ export interface DirectorsSelect<T extends boolean = true> {
|
||||
name?: T;
|
||||
localized?: T;
|
||||
movies?: T;
|
||||
movie?: T;
|
||||
directors?: T;
|
||||
updatedAt?: T;
|
||||
createdAt?: T;
|
||||
|
||||
Reference in New Issue
Block a user