laravel两列代表一个表

时间:2014-08-27 17:37:33

标签: php mysql laravel

好的,我正在建立一个足球经理网络应用程序。我有一个团队表:

------------------
| id  | name      |                 
------------------
| 1   | Barcelona |
------------------
| 2   | Madrid    |
------------------

我还有一个season_games表,这是一个精简版:

------------------------------------------
| id  | season_id | away_team | home_team |                       
------------------------------------------
| 1   |     1     |    1      |     2     |
------------------------------------------
| 2   |     1     |    2      |     1     |
-------------------------------------------

这用于在html:

中重新审核团队即将推出的游戏
<table>
        <thead>
            <tr>
                <th>Season Name</th>
                <th>Home Team</th>
                <th>Away Team</th>
                <th>Score</th>
                <th>Date</th>
            </tr>
        </thead>
        <tbody>
            @foreach($all_games as $game)
                <tr>
                    <td>
                        {{ $game->seasons->name }}
                    </td>
                    <td>
                        {{ $game->home_team }}
                    </td>
                    <td>
                        {{ $game->away_team }}
                    </td>
                    <td>
                        {{ $game->home_score . " x " . $game->away_score}}
                    </td>
                    <td>
                        {{ $game->game_date }}
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>

好的,我尝试做的就是让它成为了off_team和home_team都与团队表相关。因此,在我看来,我不需要运行getNameFromId函数,因为很明显有数百个游戏,这意味着数百个SQL查询。什么是一个有效的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

加入会非常棒,因为您不必进行简单的查询。 假设您的模型设置如下: 球队 游戏 我会用原始声明这样做:

Game::join('teams AS t1', 't1.id', '=', 'matches.away_team')
->join('teams AS t2', 't2.id', '=', 'matches.home_team')
->select('matches.id', 't1.name', 't2.name')
->get();

减少服务器端查询的一种方法就是将匹配中显示的所有ID返回到客户端,并将团队表中的这些行返回给客户端并在那里进行解码。 请给我反馈。 这是我第一次写回复。