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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

Moderators: martimiz, UncleCheese, Sean, Ed, biapar, Willr, Ingo, swaiba

DataObject::get('Member') - Foreach Statement.


Go to End


4 Posts   3069 Views

Avatar
Puppy

Community Member, 10 Posts

31 August 2010 at 12:47am

Hi everyone,

I am having problems looping through a members list (DataObjectSet) and would like to ask for a small amount of your time to advise me please.

Example code of problem:

OurSupporters.php

function pullMembers(){
		
		$members = DataObject::get('Member');	
		
		foreach($members as $member){
			return $member;
		}
}

An example of the output file:

OurSupporters.ss

<h1>$Title</h1>

<table>
<th>
<td>First Name</td>
<td>Surname</td>
</th>
<% control pullMembers %>
<tr>
	<td>$FirstName</td>
	<td>$Surname</td>
</tr>
<% end_control %> 
</table>

When running it will only display the first member - though it may be a problem with the array so I did try intoArray() but didn't work.

Though if I remove the foreach statement and "return $members;" it lists all the members but unfortunately it does not help my problem as I need to add each member into a new member class to use inGroup() on a ifelse statement.

This causes a problem when I wish to find group of a member, like so:

OurSupporters.php

function pullMembers(){
		
		$members = DataObject::get('Member');	
		
		foreach($members as $member){

                        $privateMember = new Member();
                        $privateMember = $member;

                                 if($privateMember->inGroup(5)){

			                  return $member;

                                  }else{
                                           //Do nothing
                                  }
		}
}

Thanks for your help in advance. I am new to silverstripe and convinced I am overlooking something here...

Avatar
Mad_Clog

Community Member, 78 Posts

31 August 2010 at 1:07am

Edited: 31/08/2010 1:09am

Your pullMembers method can only return 1 Member max as you're using return on the first iteration of members.
The following will loop through all members.
PHP:

function pullMembers(){
      $members = DataObject::get('Member');   
      return $members;
}

SS:
<% control pullMembers %>
<tr>
   <td>$FirstName</td>
   <td>$Surname</td>
</tr>
<% end_control %> 

Avatar
Puppy

Community Member, 10 Posts

31 August 2010 at 8:42pm

Thanks for your help.

Now I understand the error was the 'return' in the loop the rest works fine.


function pullMembers(){
		
		$members = DataObject::get('Member');	
		
		foreach($members as $member){
			
			$unknownMember = new Member();
			$unknownMember = $member;
			
			if($unknownMember->inGroup(5) != true){
				
				$members->remove($unknownMember);	
				
				break;
				
			}
		}
		
		return $members;
		
	}

Avatar
UncleCheese

Forum Moderator, 4102 Posts

1 September 2010 at 1:46am

$unknownMember = new Member();
$unknownMember = $member;

?!?!?!?!?!?!