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're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Data Model Questions /

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

Update multiple dataobject records

Go to End

2 Posts   1811 Views


Community Member, 1 Post

31 October 2010 at 11:58pm

Edited: 01/11/2010 12:01am

I am building a site that includes a page where visitors can upload an image. There will be a moderation page where an authenticated user (administrator) will be able to see the uploaded images and set an accepted / declined flag for each image.

What I would like to be able to do is update all the records shown on the page in one go, as opposed to iterating through the dataobjects and calling write() on each one. The code I am using follows. All seems to work fine except $mediaItems->write();. Is there a better way to achieve this or is it acceptable to call write() within the for loop?


class MediaDataObject extends DataObject {
   static $db = array(
      'MediaURL' => 'Text',
      'CreatorId' => 'Int',
      'IsApproved' => 'Int'

<form action="media/doModerate" method="POST">
<% control mediaList %>
    <td><img src="$MediaURL" /></td>
      <input type="radio" name="video[$ID]" value="0" <% if IsApproved==0 %>checked='checked'<% end_if %> />
      <input type="radio" name="video[$ID]" value="1" <% if IsApproved==1 %>checked='checked'<% end_if %> />
      <input type="radio" name="video[$ID]" value="2" <% if IsApproved==2 %>checked='checked'<% end_if %> />
<% end_control %>


class MediaPage_Controller extends Page_Controller {
  function init(){

  function mediaList() {
    $allMedialDataObjects = DataObject::get('MediaDataObject');
    return $allMedialDataObjects;
  function doModerate(SS_HTTPRequest $request) {
    $vars = $request->postVars();
    $approvals = $vars['video'];
    $mediaItems = DataObject::get('MediaDataObject');	
    foreach ($mediaItems as $mediaItem) {
      $mediaItem->IsApproved = $approvals[$mediaItem->ID] ;


Community Member, 279 Posts

13 November 2010 at 8:57am

mediaItems is a DataObjectSet and the method "write()" belongs to DataObject. You have to iterate maybe with foreach and write every single one:

foreach $mediaItems as $mediaItem {