我有一个小问题。我在数据库中有一个名为'player_skills'的表。它包含这样的列(示例):
player_id | skill_id |价值|计数
player_id实际上是玩家的ID,在'玩家'表下是'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);
}
它工作正常,但我需要在标签中为每种技能进行更改。
答案 0 :(得分: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;
});
询问是否有不明确的事情。