【问题标题】:PHP/Laravel/Bootsrap fetch dataPHP/Laravel/Bootstrap 获取数据
【发布时间】:2013-08-01 16:35:28
【问题描述】:

我有一个小问题。我在数据库中有一个名为“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);
    }
    

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

    【问题讨论】:

    • 我们能否提供更多关于您想要打印的内容的详细信息?每个人都有技能标签的玩家列表,还是里面有玩家的技能标签列表?一个小的抽奖或架构可能会有所帮助。
    • @Alexandre Butynski 里面有玩家的技能标签列表。基本上是通过 player_id 和 Skill_id 获取玩家名称,并从高到低排序。然后,当您更改标签时,您将获得另一个做同样事情的技能。

    标签: php twitter-bootstrap laravel laravel-4


    【解决方案1】:

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

    有不清楚的地方问一下。

    【讨论】:

    • 首先感谢您的回答。其次,我收到一个错误:SQLSTATE[42S02]: Base table or view not found: 1146 Table 'thefs.skills' doesn't exist (SQL: select * from skills) (Bindings: array ( ))。其实是player_skils表,不过不知道改什么哈哈。
    • 如果您的模型中的一个不遵循约定,您必须在模型中使用protected $table = 'skill'; 设置表名。正如我所解释的,关系表是在关系声明中设置的。你什么时候收到这个错误?
    • 当我尝试进入视图时。我还有一个新错误(很长):paste.laravel.com/FUQ,我知道这是表格的问题,这是我的表格的样子:2.imgland.net/NECS_h.png
    • 你好,你能在提问前花5秒自己搜索一下吗?错误很明显:Unknown column 'player_skills.skill_id',因为在您的表中,该列被命名为 skillid 而不是 skill_id
    • 哈,抱歉,没看到。我现在得到一个未定义的属性:Illuminate\Database\Eloquent\Collection::$players 错误。错误在这一行:&lt;?php foreach ($skills-&gt;players as $player): ?&gt;.
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 2018-03-08
    • 2022-01-26
    • 2019-12-07
    • 2016-01-07
    • 2019-07-06
    • 2021-11-21
    • 2016-09-14
    相关资源
    最近更新 更多