PHPackages                             oberonamsterdam/craft-manytomany - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. oberonamsterdam/craft-manytomany

AbandonedArchivedCraft-plugin

oberonamsterdam/craft-manytomany
================================

A Field Type plugin for Craft 3 that allows the management of relationships from both sides.

1.1.0(8y ago)019MITPHPPHP &gt;=7.0.0

Since Apr 1Pushed 3y ago1 watchersCompare

[ Source](https://github.com/oberonamsterdam/craft-manytomany)[ Packagist](https://packagist.org/packages/oberonamsterdam/craft-manytomany)[ RSS](/packages/oberonamsterdam-craft-manytomany/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (3)Dependencies (1)Versions (6)Used By (0)

Archived
========

[](#archived)

This project is now archived, development has been picked up by [Verbb](https://verbb.io) and can be found [here](https://github.com/verbb/craft-manytomany)

Many to Many Field Type plugin for Craft 3
==========================================

[](#many-to-many-field-type-plugin-for-craft-3)

Many to Many is a [Craft CMS](http://www.craftcms.com) plugin developed by [Page 8](http://page-8.com) and updated to support Craft 3 by [Oberon](https://www.oberon.nl). This plugin allows you to manage relationships in Craft from either of the entries that belong to the association. For example, if you have a recipe with many ingredients, and ingredients that belong to many recipes, you can manage the relationship from either the Recipe's entry or the Ingredient's entry.

Requirements
------------

[](#requirements)

This plugin requires Craft CMS 3.0.0-beta.28 or later.

Installation
------------

[](#installation)

To install the plugin, follow these instructions.

1. Open your terminal and go to your Craft project:

    ```
     cd /path/to/project

    ```
2. Then tell Composer to load the plugin:

    ```
     composer require oberonamsterdam/craft-manytomany

    ```
3. In the Control Panel, go to Settings → Plugins and click the “Install” button for Many to Many Field Type.

Usage
-----

[](#usage)

1. Create your initial relationship field using the Entries Field Type and attach it to your first section

- This is done directly through Craft's native "Entries" field type
- This example assumes this is done on the "Recipes" section creating a field called "Related Ingredients" that allows entries from the Ingredients section [![Recipes Screen](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/resources/screenshots/recipes-view.png)](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/resources/screenshots/recipes-view.png)

2. Create another field that attaches the relationship using the Many to Many field type

- This is done by creating a new field and selecting the Many to Many field type

3. Customize your Settings

- *Linked Section* will be the initial section that contains the relationship. (in our example Recipes)
- *Associated Field* is the field on the other end of this relationship. (in our example Related Ingredients) [![Settings Screen](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/resources/screenshots/settings.png)](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/resources/screenshots/settings.png)

4. Attach the newly created Many to Many field to your section [![Ingredients Screen](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/resources/screenshots/ingredients-view.png)](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/resources/screenshots/ingredients-view.png)

Template Usage
--------------

[](#template-usage)

Since this plugin relies on Craft's built in relationships, you can continue to use relationships just as you always have.

**Recipes showing Related Ingredients**

```
Related Ingredients
{% set relatedIngredients = craft.entries.section('ingredients').relatedTo(entry).all() %}
{% for ingredient in relatedIngredients %}
    {{ ingredient.title }}
{% endfor %}

```

**Ingredients showing Related Recipes**

```
Related Recipes
{% set relatedRecipes = craft.entries.section('recipes').relatedTo(entry).all() %}
{% for recipe in relatedRecipes %}
    {{ recipe.title }}
{% endfor %}

```

Version History
---------------

[](#version-history)

See [CHANGELOG.md](https://raw.githubusercontent.com/oberonamsterdam/craft-manytomany/master/CHANGELOG.md).

To Do
-----

[](#to-do)

1. Allow the field to work across all (or at least more) Element Types. Currently only supports Entries.
2. Allow custom ordering of the secondary relationship. Currently you can only order the primary relationship (by Craft's native ordering of the Entries field type).
3. Fix a bug that doesn't allow it to work from the modal tab.
4. Other stuff I assume.

### Notes

[](#notes)

- Currently doesn't support locales
- As always, use at your own risk

### License

[](#license)

This work is licenced under the MIT license.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 96.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~282 days

Total

3

Last Release

3129d ago

Major Versions

0.1.2 → 1.0.02017-09-20

### Community

Maintainers

![](https://www.gravatar.com/avatar/a151375d973541067ec16f2d39124e3c1902cabd5d2875d173926908c3773031?d=identicon)[Oberon](/maintainers/Oberon)

---

Top Contributors

[![Wiejeben](https://avatars.githubusercontent.com/u/2922378?v=4)](https://github.com/Wiejeben "Wiejeben (31 commits)")[![OberonDevs](https://avatars.githubusercontent.com/u/58808943?v=4)](https://github.com/OberonDevs "OberonDevs (1 commits)")

---

Tags

cmsCraftcraftcmscraft-pluginfieldtypeentries

### Embed Badge

![Health badge](/badges/oberonamsterdam-craft-manytomany/health.svg)

```
[![Health](https://phpackages.com/badges/oberonamsterdam-craft-manytomany/health.svg)](https://phpackages.com/packages/oberonamsterdam-craft-manytomany)
```

###  Alternatives

[nystudio107/craft-seomatic

SEOmatic facilitates modern SEO best practices &amp; implementation for Craft CMS 5. It is a turnkey SEO system that is comprehensive, powerful, and flexible.

1741.4M46](/packages/nystudio107-craft-seomatic)[page-8/craft-manytomany

A field type to manage relationships from both sides.

8114.2k1](/packages/page-8-craft-manytomany)[verbb/many-to-many

A field type to manage relationships from both sides.

8112.0k](/packages/verbb-many-to-many)[verbb/image-resizer

Resize assets when they are uploaded.

127269.1k7](/packages/verbb-image-resizer)[jalendport/craft-preparse

A fieldtype that parses Twig when an element is saved and saves the result as plain text.

1086.4k](/packages/jalendport-craft-preparse)[verbb/tablemaker

Create customizable and user-defined table fields.

40168.8k1](/packages/verbb-tablemaker)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
