-2

我有一个小问题。我在数据库中有一个名为“player_skills”的表。它包含这样的列(示例):

player_id | 技能ID | 价值 | 数数

  • 15 0 10 12
  • 15 1 10 51
  • ...
  • 15 8 10 12
  • player_id 实际上是玩家的 id,它是“players”表下的“id”列。还有八种技能。值是默认值(在这种情况下无关紧要)。计数是价值(玩家技能的价值)。

    基本上,我想要的是将数据拉入 Bootstrap 选项卡(示例):

            <div class="tabbable tabs-left">
        <ul class="nav nav-tabs">
        <li class="active"><a href="?skill0" data-toggle="tab">Section 1</a></li>
        <li><a href="?skill1" data-toggle="tab">Section 2</a></li>
        <li><a href="?skill2" data-toggle="tab">Section 3</a></li>
    ...
        </ul>
        <div class="tab-content">
        <div class="tab-pane active" id="?skill0">
        <p>I'm in Section A.</p>
        </div>
        <div class="tab-pane" id="?skill1">
        <p>Howdy, I'm in Section B.</p>
        </div>
        <div class="tab-pane" id="?skill2">
        <p>What up girl, this is Section C.</p>
        </div>
        </div>
        </div>
    

    我想订购它(从最高到最低,(而且我在每个玩家中都有一个“group_id”列,所以我不希望它包含一个 group_id 等于 3 的玩家)但是对于每个技能) . 此外,我还有一项位于“玩家”表中的技能(名为“经验”的列),我已经这样做了:

        public function highscores()
    {
        $players = Player::orderBy('experience','desc')->get();
        return View::make('aac.highscores')->with('players', $players);
    }
    

    它工作得很好,但我需要在标签中更改每项技能。

    4

    1 回答 1

    0

    Laravel 很好地满足了您的需求。首先,您必须像这样声明技能和玩家之间的多对多关系(阅读更多: http: //laravel.com/docs/eloquent#many-to-many):

    class Skill extends Eloquent {
    
        public function players() {
            return $this->belongsToMany('Player', 'player_skills', 'skill_id', 'player_id')
                        ->withPivot('value', 'count');
        }
    
    }
    

    然后,您可以从与该with方法链接的玩家的数据库中获取所有技能。这种方法不是强制性的(您可以all改用),但在这里预先加载是一个很好的做法(阅读更多: http: //laravel.com/docs/eloquent#eager-loading):

    class SkillController extends BaseController {
    
        public function index()
        {
            $skills = Skill::with('players')->get();
    
            return View::make('skill.index', array('skills' => $skills));
        }
    
    }
    

    最后可以迭代你的技能数组和每个技能中的玩家数组(阅读更多关于刀片模板的信息:http: //laravel.com/docs/templates#blade-templating):

    <!-- index.blade.php -->
    <div class="tabbable tabs-left">
        <ul class="nav nav-tabs">
        @foreach ($skills as $skill)
            <li><a href="?{{ $skill->id }}" data-toggle="tab">{{ $skill->name }}</a></li>       
        @endforeach
        </ul>
        <div class="tab-content">
        @foreach ($skills as $skill)
            <div class="tab-pane active" id="?{{ $skill->id }}">
                @foreach ($skills->players as $player)
                    <p>{{ $player->name }} : {{ $player->pivot->count }} points !</p>
                @endforeach
            </div>
        @endforeach
        </div>
    </div>
    

    如果您想按技能计数为您的球员排序,您可以使用这样的sortBy功能(阅读更多: http: //laravel.com/docs/eloquent#collections):

    $orderedPlayers = $skill->players->sortBy(function($player) {
        return $player->pivot->count;
    });
    

    问有什么不清楚的。

    于 2013-08-02T11:38:26.660 回答