【问题标题】:Laravel : merge two models and groupBy the resultLaravel:合并两个模型和 groupBy 结果
【发布时间】:2021-10-24 21:12:12
【问题描述】:

我有两个模型并将它们合并并尝试将它们与列的总和进行分组:

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;
    }

返回结果是这样的:

[
  {
    "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"
  },

不,我想按俱乐部对收藏进行分组并将它们相加,我这样做了:

   $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. 我该如何解决这个问题?

通知

当我打印返回类型时,打印:object

【问题讨论】:

    标签: arrays laravel collections group-by merge


    【解决方案1】:

    你可以试试类似的,

    $cards = Game::groupBy('club')->selectRaw(' club ,SUM(cards) as card')->orderBy('card','desc')->get();
    
    $all_cards->merge($cards->toArray());
    

    【讨论】:

    • 我对 $home_cards_games 没有问题,只是在$all_cards=$all_cards->groupBy('club')->selectRaw(' club ,SUM(cards) as card')->orderBy('card','desc')->get(); 行出错
    • @Sermedmayi 您已将$all_cards 定义为一个集合。在 Laravel 的 collect() 助手上,groupBy 方法可用,但 selectRaw 不可用。您可以将查询结果存储在另一个变量中,然后将数据推送到$all_cards
    • @Sermedmayi 我已经更新了我的答案。我希望它会有所帮助。
    • 哦……我的错。我粘贴了一个错误的代码。我已经更新了解决方案。
    【解决方案2】:

    我解决了这个问题: 我改变了:

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

    【讨论】:

      猜你喜欢
      • 2019-09-08
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2015-06-20
      相关资源
      最近更新 更多