Laravel :合并两个模型并对结果进行分组
Laravel : merge two models and groupBy the result
我有两个模型并将它们合并并尝试用列的总和对它们进行分组:
public function getCards()
{
$home_cards_games=Game::groupBy('home_club_id')->selectRaw(' home_club_id ,SUM(home_cards) as cards')->orderBy('cards','desc')->get();
foreach($home_cards_games as $home_cards_game){
$home_cards_game->club=$home_cards_game->homeclub->club;
unset($home_cards_game->homeclub);
}
$away_cards_games=Game::groupBy('away_club_id')->selectRaw(' away_club_id ,SUM(away_cards) as cards')->orderBy('cards','desc')->get();
foreach($away_cards_games as $away_cards_game){
$away_cards_game->club=$away_cards_game->awayclub->club;
unset($away_cards_game->awayclub);
}
现在我合并了两个模型 $home_cards_games 和 $away_cards_games :
$all_cards=collect();
foreach($home_cards_games as $home_cards_game){
$all_cards->push($home_cards_game);
}
foreach($away_cards_games as $away_cards_game){
$all_cards->push($away_cards_game);
}
return $all_cards;
}
return 结果是这样的:
[
{
"home_club_id": 52,
"cards": 2,
"league": "Serie A",
"club": "Udinese"
},
{
"home_club_id": 39,
"cards": 0,
"league": "LaLiga Santander",
"club": "Mallorca"
},
{
"home_club_id": 2,
"cards": 0,
"league": "Premier League",
"club": "Man Utd"
},
不,我想按俱乐部对 collection 进行分组并对它们的卡片求和,我这样做了 :
$all_cards=$all_cards->groupBy('club')->selectRaw(' club ,SUM(cards) as card')->orderBy('card','desc')->get(); // error is here
我收到这个错误:Method Illuminate\Support\Collection::selectRaw does not exist.
我该如何解决这个问题?
通知
当我打印 return 类型时,它会打印:object
你能试试这样的东西吗,
$cards = Game::groupBy('club')->selectRaw(' club ,SUM(cards) as card')->orderBy('card','desc')->get();
$all_cards->merge($cards->toArray());
我是这样解决的: 我改变了:
$all_cards=collect();
foreach($home_cards_games as $home_cards_game){
$all_cards->push($home_cards_game);
}
foreach($away_cards_games as $away_cards_game){
$all_cards->push($away_cards_game);
}
至:
$all_cards=collect();
foreach($home_cards_games as $home_cards_game){
foreach($away_cards_games as $away_cards_game){
if($home_cards_game->club == $away_cards_game->club){
$home_cards_game->cards = $home_cards_game->cards+$away_cards_game->cards;
}
}
$all_cards->push($home_cards_game);
}
我也删除了这一行:
$all_cards=$all_cards->groupBy('club')->selectRaw(' club ,SUM(cards) as card')->orderBy('card','desc')->get();