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.

Data Model Questions /

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

Forcing getRange to work


Go to End


4 Posts   1289 Views

Avatar
Ryan M.

Community Member, 309 Posts

9 November 2011 at 10:17am

I feel so noobish for posting this. I've been unable to force getRange to work! It displays more posts than I want.

public function getCombinedNews($limit) {
		$name = $this->Title;
		$entries = DataObject::get("BlogEntry", "Tags LIKE '%{$name}%'");
		$articles = $this->Articles();
		$articles->merge($entries);
		$articles->sort('Created', 'DESC');
		if(isset($limit)) {
			$articles->getRange(0,$limit);
		}
		return $articles;
	}

Avatar
MarcusDalgren

Community Member, 288 Posts

9 November 2011 at 10:48am

It returns the range as a new DataObjectSet so it needs to be

$articles = $articles->getRange(0,$limit); 

Avatar
Ryan M.

Community Member, 309 Posts

9 November 2011 at 11:16am

Thanks for the tip! Unfortunately, that didn't work. To make sure it wasn't the if(isset()) part, I commented it out so that the limit would get applied regardless. It returns no objects at all now!

Avatar
MarcusDalgren

Community Member, 288 Posts

9 November 2011 at 11:39am

Then I would be checking exactly what you're feeding the function. getRange is just

	public function getRange($offset, $length) {
		$set = array_slice($this->items, (int)$offset, (int)$length);
		return new DataObjectSet($set);
	}

As you can see it's just array_slice() with one variable for where to start and one for how many to grab. Likely your $limit variable is either 0 or something else that gets turned into 0 by the int cast. Also since your function definition requires that $limit is sent to the function your isset will always return true.