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

Importing CSV data to an Object with a many_many relation

Go to End

4 Posts   3166 Views


Community Member, 279 Posts

26 November 2009 at 11:10pm

I´m trying to import CSV data. One column of the CSV should be imported as a many_many relation. The CSVBulkLoader can manage relationCallbacks on a has_one relation but what about many_many? Can anyone provide a code example or good hint?


Community Member, 607 Posts

27 November 2009 at 9:03am



Community Member, 279 Posts

27 November 2009 at 11:30pm

I solved my issue but this isn´t the elegant way. I import my csv data with fgetcsv(). The value of the field that represents the many_many relation is converted to an array with explode(). The elements of this array get saved to the table that represents the many_many relation. I did this with

$sql = "INSERT INTO `database`.`Relation_table` (`column1`, `column2`) VALUES ('$studioID', '$contract->ID');";

This is no more ORM, that´s why I call my way less elegant, but it works.

DataObject::getManyManyFilter might be the method to do this the right way but nor did I understand it yet neither is it documented.


Forum Moderator, 801 Posts

2 December 2009 at 9:48pm

I'm just working on a subclass of CSVBulkLoader, called MemberCsvBulkLoader. See first cut:
It can take multiple group codes inside a new "Groups" column in the CSV data for each member row, and resolves them automatically into manymany relationships.

The main issue here is that for each relationship, you'd probably want some unique criteria other than a primary key to make the CSV file independent of your specific database keys. In the case of $member->Groups() relations, thats already solved for us with the "Code" property.

This class will most likely find its way into SilverStripe trunk soon, together with a new "Import" tab in the admin/security section :)