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 /

Update multiple dataobject records


Reply


2 Posts   1145 Views

Avatar
noisyjerm

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?

MediaDataObject.php

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

MediaPage.ss

<form action="media/doModerate" method="POST">
<table>
<% control mediaList %>
<tr>
<td><img src="$MediaURL" /></td>
<td>$Created.Nice</td>
<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 %> />
</td>
</tr>
<% end_control %>
</table>

MediaPage.php

class MediaPage_Controller extends Page_Controller {
function init(){
parent::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] ;
//$mediaItem->write();
}
$mediaItems->write();
}   
}

Avatar
baba-papa

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 {
$mediaItem->write();
}