[eluser]OverZealous[/eluser]
There isn't currently a way to do what you want. In reality, that would be somewhat complex SQL code, anyway, at the very least requiring a subquery.
When you write $team->player->get(), you are asking DataMapper to give you all players that belong the team specified by $team.
In other words, the foreach loop is your best bet.
If you are feeling risky, you could try the poorly documented upgrade to DataMapper I posted a while back. It contains the ability for in-table has_one joins, meaning your Player table could have 'league_id' and 'team_id' on it, and then you wouldn't need the join tables at all. Then your query looks something like:
Code:
$player = new Player();
$player->where_in('team_id', array($team1->id, $team2->id, etc))->get();
Also, if you are including a join to leagues for players, why not just do this?
Code:
$league->player->get();