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

Problems with many_many / belongs_many_many


Go to End


3 Posts   4559 Views

Avatar
eeerlend

Community Member, 2 Posts

17 December 2013 at 1:15pm

Hi!

I'm trying to build all data objects for my football web application, and have some issues with many_many relations. I've created a modelAdmin for managing teams and competitions, and I've listed the relevant objects below.

My problem is that I get the following error when trying to save a "Team" (Displayed as "Internal Server Error" in admin), but I got the db-entry for the Team.

Any help appreciated!

[17-Dec-2013 01:12:47] Error at framework/model/DataObject.php line 1849: Inverse component of Competition not found (Team) (http://localhost/admin/teams/Team/EditForm/field/Team/item/8)
[17-Dec-2013 01:12:47] Error at framework/model/DataObject.php line 1860: Orphaned $belongs_many_many value for Team.Competitions (http://localhost/admin/teams/Team/EditForm/field/Team/item/8)
[17-Dec-2013 01:12:47] Error at framework/model/DataQuery.php line 116: DataList::create Can't find data classes (classes linked to tables) for . Please ensure you run dev/build after creating a new DataObject. (http://localhost/admin/teams/Team/EditForm/field/Team/item/8)
[17-Dec-2013 01:12:47] Error at framework/core/Core.php line 152: singleton() Called without a class (http://localhost/admin/teams/Team/EditForm/field/Team/item/8)
[17-Dec-2013 01:12:47] Error at framework/core/Core.php line 154: singleton() passed bad class_name: NULL (http://localhost/admin/teams/Team/EditForm/field/Team/item/8)
[17-Dec-2013 01:12:47] Error at framework/control/injector/InjectionCreator.php line 18: Uncaught ReflectionException: Class  does not exist (http://localhost/admin/teams/Team/EditForm/field/Team/item/8)

The classes

class Competition extends DataObject {
	private static $db = array(
		'Title' => 'Varchar',
		'StartDate' => 'Date',
		'EndDate' => 'Date'
	);

	public function getCMSFields() {
		$fields = parent::getCMSFields();
		return $fields;
	}
}

class FootballCompetition extends Competition {
	private static $has_many = array(
		'Matches' => 'Match'
	);

	private static $many_many = array(
                'Teams' => 'Team'
    );
}

class Team extends DataObject {
	private static $db = array(
		'Title' => 'Varchar',
		'Shortname' => 'Varchar'
	);

	private static $has_many = array(
		'MatchesHome' => 'Match.HomeTeam',
		'MatchesAway' => 'Match.AwayTeam',
	);

	private static $belongs_many_many = array(
                'Competitions' => 'Competition'
    );

	function getMatches() { 
		return DataObject::get('Match', "HomeTeamID = '$this->ID' OR AwayTeamID = '$this->ID'"); 
	}
}

class TeamAdmin extends ModelAdmin {
	private static $managed_models = array('Team');
	private static $url_segment = 'teams';
	private $menu_title = 'Team Admin';
}

Avatar
eeerlend

Community Member, 2 Posts

17 December 2013 at 10:17pm

Hi, I've solved this myself.

The problem was that a "Team" > belongs_many_many > Competition. It should be "FootballCompetition" instead of "Competition".

Avatar
eumesmo

Community Member, 1 Post

2 June 2014 at 3:10am

Hi, i'm also developing a similar data model, but also include seasons, have you made it using seasons?