Payload CMS uses a schema-based approach to define relationships in the collections configuration.
One to One
import { CollectionConfig } from “payload/types”;
const Users: CollectionConfig = {
slug: “users”,
fields: [
{
name: “profile”,
type: “relationship”,
relationTo: “profiles”, // The related collection
unique: true, // Ensures one-to-one relationship
},
],
};
export default Users;
import { CollectionConfig } from “payload/types”;
const Profiles: CollectionConfig = {
slug: “profiles”,
fields: [
{
name: “user”,
type: “relationship”,
relationTo: “users”,
unique: true, // Ensures one-to-one relationship
},
],
};
export default Profiles;
One to Many
const Orders: CollectionConfig = {
slug: “orders”,
fields: [
{
name: “user”,
type: “relationship”,
relationTo: “users”, // Many orders belong to one user
},
],
};
const Orders: CollectionConfig = {
slug: “orders”,
fields: [
{
name: “user”,
type: “relationship”,
relationTo: “users”, // Many orders belong to one user
},
],
};
Many to Many
const Products: CollectionConfig = {
slug: “products”,
fields: [
{
name: “categories”,
type: “relationship”,
relationTo: “categories”,
hasMany: true, // Many-to-many relationship
},
],
};
constCategories: CollectionConfig = { slug: “categories”, fields: [ { name: “products”, type: “relationship”, relationTo: “products”, hasMany: true, // Many-to-many relationship }, ], };