**Silverstripe Version: 4.2.1 **
**Question: It’s not possible to set a Filter on Join Table **
I upgraded a Project from SS3 to 4.2.1. When I filter on a join like this (in my Game.php):
$awayplayers = $this->players()->leftJoin("Team_players", "Team_players.playerID = Player.ID")->filter(array("Team_players.TeamID" => $this->team2ID));
I get an Error:
[Emergency] Uncaught InvalidArgumentException: Team_players is not a relation on model MYNAMESPACE\Player
In SS3 this was no Problem. In this particular case TeamID is not ambigeous so it works when I just use “TeamID” instead of “Team_players.TeamID”. But I have many similar joins like that.
My DataObjects loks like tis:
class Player extends DataObject {
private static $table_name = 'Player';
private static $singular_name = 'Spieler/Trainer';
private static $plural_name = 'Spieler/Trainer';
private static $belongs_many_many = array(
'teams' => Team::class,
'games' => Game::class
);
}
class Team extends DataObject {
private static $table_name = 'Team';
private static $singular_name = Team::class;
private static $plural_name = 'Teams';
private static $has_one = array(
'club' => Club::class
);
private static $default_sort = 'Team.season DESC';
private static $many_many = array(
'competitions' => Competition::class,
'players' => Player::class
);
}
class Game extends DataObject {
private static $table_name = 'Game';
private static $has_one = array (
"competition" => Competition::class,
"team1" => Team::class,
"team2" => Team::class
);
private static $many_many = array (
'players' => Player::class
);
private static $many_many_extraFields = array (
'players' => array (
'playerIn' => 'Int',
'playerOut' => 'Int',
'reserve' => DBBoolean::class,
'replacedPlayerID' => 'Int',
'yellowCard' => DBBoolean::class,
'yellowRedCard' => DBBoolean::class,
'redCard' => DBBoolean::class,
'minuteYellowCard' => 'Int',
'minuteRedCard' => 'Int'
)
);