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.

Customising the CMS /

Outputing data from a many to many relationship


Reply


3 Posts   1698 Views

Avatar
Andrew Houle

Community Member, 133 Posts

10 January 2009 at 7:00am

I'm really frustrated with an issue I'm having; logically I think I have everything in order, so I'm puzzled with what I'm doing wrong, hopefully someone can help.

Here's the basic info. I have a page type called SaturdayPage, a page type called Faculty and a data object called course. The relationships are as follows:
A SaturdayPage has many Course and a Course belongs to many SaturdayPage
A Faculty has many Course and a Course has one Faculty

All the complex table fields work and the info seems to be stored properly in the DB. Where I run into trouble is when I try to use this simple function w/in Course.php:

function getFaculty() {
   $obj = 'Faculty';
      $sort = 'FirstName ASC';
      $filter = 'Faculty', "`ID` = '{$this->FacultyID}'";
      $join = '';
      $limit = '';
      $gf = DataObject::get($obj, $filter, $sort, $join, $limit);
      return $gf;   
}

In the database the FacultyID field is populated correctly, but this code renders nothing in the template. If I take out the $filter variable, I can populate all the Faculty objects. But even the simpliest of filters (ie "ID='1'";) breaks everything down, and I get an error.

Here is the code excerpt in the template (ScheduleHolder.ss)

<% control Children %>
      <h2>$Header</h2>
<p>
   <% if StartDate %>$StartDate.Format(m)/$StartDate.Format(d)/$StartDate.Format(y)<% end_if %>
   <% if EndDate %> - $EndDate.Format(m)/$EndDate.Format(d)/$EndDate.Format(y)<% end_if %>
<% if SpecialComments %><br />$SpecialComments<% end_if %>
</p>
<% control Courses %>
   $CourseTitle
   <% control getFaculty %>
   $Name
<% end_control %>

<% end_control %>
   <% end_control %>

Please let me know any ideas you guys/gals may have. Also if it helps to show the pages and dataobject classes let me know.

Thanks in advance.

Avatar
TT

Community Member, 6 Posts

10 January 2009 at 10:03am

Edited: 10/01/2009 10:04am

I think you do not have to use a special method giving you the relation. Following snipped should work:

...
<% control Faculty %>
$Name
<% end_control %>
The control gives you the related object (because in this direction it is similar to a 1-to-1 relation)

Otherwise following statement will give you the related Faculty object:
function getFaculty() {
return $this->getComponent('Faculty');
}

Your filter does not work because it is directly taken to the WHERE clause in the SQL statement. A simple
...
$filter = 'ID = ' . $this->FacultyID;
...
should also find the correct related object.

Avatar
Andrew Houle

Community Member, 133 Posts

10 January 2009 at 10:32am

You rock, thanks for the great advice! I'm glad I asked and then walked away for a bit. Sometimes the answer should be right in front of you, but you just can't see it. How I could not try that first simple control loop is beyond me, either way... the help is much appreciated :)