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();