Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions /

SOLVED: reverse many_many grouping


Reply


2 Posts   509 Views

Avatar
Matty Balaam

Community Member, 69 Posts

10 June 2013 at 6:31am

I’m still trying to get to grips with many_many and need a bit of help.

Say for example I had a $db field called 'Tag' on a DataObject. It is easy to adapt the examples on this page: http://doc.silverstripe.org/framework/en/howto/grouping-dataobjectsets and easily group results by a single tag per Object:

-----
Tag 1:
-----

Object 1
Object 3

-----
Tag 2:
-----

Object 2

But what I wish to do is sort according to a selection of Tags which have been added using a $many_many and this module https://github.com/chillu/silverstripe-tagfield. So, for example Object 3 may now have both 'Tag 1' and 'Tag 2' so I wish to display like:

-----
Tag 1:
-----

Object 1
Object 3

-----
Tag 2:
-----

Object 2
Object 3

To do this, I assume I have to adapt the older code for a GroupedList::create on the page, but obviously the join-table is not a DataObject, so how do I go about approaching this?

Any help at all is very appreciated, I think I have spent my whole Sunday trying to figure this out.

Avatar
Matty Balaam

Community Member, 69 Posts

11 June 2013 at 5:25am

Edited: 11/06/2013 5:26am

I had a bit of time away from this, and then coming back to it I was pleased how easy it was to do this.

In my pages Controller class I have a function:

   public function getTag() {
      $tag = Tag::get();
      if ($tag) return $tag;
   }

And then on my page template

      <% if getTag %>
      <% loop getTag %>
         <h3>$Title</h3>
            <ul>
            <% loop MyObject %>
               <li>$Title</li>
            <% end_loop %>
            </ul>
      <% end_loop %>
      <% end_if %>