-2

ちょっとした問題があります。データベースに「player_skills」というテーブルがあります。次のような列が含まれています (例):

player_id | スキル ID | 値 | カウント

  • 15 0 10 12
  • 15 1 10 51
  • ...
  • 15 8 10 12
  • player_id は、実際には「players」テーブルの下の列「id」にあるプレーヤーの ID です。また、8つのスキルがあります。Value はデフォルト値です (この場合は関係ありません)。カウントは値(プレイヤーのスキルの値)です。

    基本的に、私が欲しいのはデータを 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に等しいプレーヤーを含めたくありません)が、スキルごとに) . また、「プレイヤー」テーブル (「経験」と呼ばれる列) にあるスキルが 1 つあり、次のようにしました。

        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 に答える