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

How to call a method on a data object

Go to End

14 Posts   3038 Views


17 January 2009 at 5:47am Community Member, 16 Posts

Regarding thread #143123 (,

How do I call a method on a data object? In willr's response, he does not call the method anywhere in the data object. How does this work?


17 January 2009 at 5:56am Community Member, 16 Posts

Here's another post with the same issue.


17 January 2009 at 6:28am 4085 Posts

Yeah, that's kind of tricky.

He defines the method getImageFileName(), and you'll see in the table, he sets up a field for ImageFileName in the table headings array. If Silvesrtripe doesn't find a property or field called ImageFileName, it knows to try running a method called getImageFileName.

It's all done with the wildcard methods in PHP5, __get() and __call(). Very cool stuff.


17 January 2009 at 8:01am Community Member, 16 Posts

Hi UncleCheese,

Thanks for the information. It has helped me to understand what is happening here.

Unfortunately I still have an issue. I have everything set up correctly but the method does not return anything. Not even a simple string return for testing. I think I'm at the same point as described in thread #117959 linked above.

Why would there be no return value?
Thank you.


21 January 2009 at 2:41am Community Member, 501 Posts

It seems to work for me on 2.2.3 if that helps :)


21 January 2009 at 5:37am Community Member, 16 Posts

Hi dio5,

That is interesting. The version I'm working with is 2.3 rc2. It makes me nervous to potentially use this version in a production environment if something as basic as calling a method on a data object doesn't work.

Here's an example of my code:

class LinksTable extends Page {

static $many_many = array(
'LinksTable1' => Links',

function getCMSFields() {
$fields = parent::getCMSFields();

$LinksTable1tablefield = new ManyManyComplexTableField(
'LinkName' => 'Link Name',
'LinkTitle' => 'Link Title',
'LinkLocation' => 'Link URL',
'LinkColumnName' => 'Link Column'
$LinksTable1tablefield->setAddTitle( 'New Link' );

return $fields;


The field in question is "LinkColumnName". In the database this data is stored as type 'Int'. I want to display a text value on output, depending on the return value.

The function being called, as it is right now:

class Links extends DataObject {
static $db = array(
'LinkName' => 'Text',
'LinkTitle' => 'Text',
'LinkLocation' => 'Text',
'LinkColumn' => 'Int'

static $has_one = array(

static $belongs_many_many = array(
'LinksTable1' => 'LinksTable'

function getCMSFields_forPopup() {
$options = array('1'=>'Column One','2'=>'Column 2','3'=>'Column 3');

$fields = new FieldSet();
$fields->push( new TextField( 'LinkName', 'Link Name' ) );
$fields->push( new TextField( 'LinkTitle', 'Link Title' ) );
$fields->push( new TextField( 'LinkLocation', 'Link URL' ) );
$fields->push( new DropdownField('LinkColumn', 'Link Column', $options));
return $fields;

function getLinkColumnName() {
return "test";


This should return "test" in each row of the "LinkColumnName" column, but it returns nothing.

Any insight would be appreciated.


21 January 2009 at 9:29am Community Member, 501 Posts

Hmm, would indeed expect this to work (unless I overlooked something).

Any chance you could try this on a 2.2.3 to make sure it's the version difference?


22 January 2009 at 6:15am Community Member, 16 Posts

Hi dio5,

I tried my code in 2.2.3 today with no success. The same results occurred with blank fields.

Would it be possible for you to share a code sample which works in 2.2.3?


Go to Top