【问题标题】:Laravel loop through all columnsLaravel 循环遍历所有列
【发布时间】:2018-12-02 19:39:00
【问题描述】:

有人可以帮我提高我的代码效率吗...我正在尝试显示每年的冠军,但我不知道如何循环遍历年份的每一列,而是逐年查看并显示记录和冠军,我觉得这是犯罪效率低下......这是我的控制器和视图。

控制器

$seasonOnes= TeamRank::select('am')
->where('2016', 1)
->get();
$seasonTwos= TeamRank::select('am')
->where('2015', 1)
->get();

查看

@if($seasonTwos)
@foreach($seasonTwos as $seasonTwo)
    <strong>2015 Winner</strong>
    {{$seasonTwo->am}}
@endforeach
@endif

我的数据库中每个季节的每个循环都有一个,其中每列是一年。需要明确的是,我的代码正在运行,但我觉得必须有一种方法可以遍历每一列。我可以将变量设置为数组并让它在各种 where 语句中循环吗?

【问题讨论】:

  • 你sn-p没有意义???特别是 where 子句。您正在从 TeamRank 模型中选择一些列,其中(什么等于什么)???你能清除它吗?喜欢你的桌子描述吗??
  • 赛季列或年份在哪里,我没有创建数据库,但是每个列是一个赛季,根据球队当年完成的位置排名1-63,所以“哪里->” 2016', '1' 表示他们在该组中排名第一......我希望循环遍历每个赛季的列,并以“1”排名也就是冠军
  • 那么 2016 2015 是你的列名吗?
  • 是的,2005-2016 是列名
  • @Supun Praneeth 这些信息对您有帮助吗?

标签: php laravel for-loop foreach


【解决方案1】:

这并不完全是您想要的,但这可能会对其他用户有所帮助。

你不应该使用数据作为列名。

在您的代码中,年份是一列,因此每年您都必须添加额外的列,或者换句话说,它是不可数的。所以永远不要创建一个易于人类阅读但不适合计算机的表格。我猜你的桌子设计是这样的:

am     | 2005  | 2006 | 2007
name1  |  1    |  0   |  1
name2  |  0    |  1   |  0
name3  |  0    |  0   |  0

这是我推荐的设计:

am    | year 
name1 | 2005
name2 | 2006
name1 | 2007

或者

am    | year  | win
name1 | 2005  | 1
name2 | 2006  | 1
name3 | 2007  | 0

假设您使用最后一种方法创建,那么您可以像这样访问数据:

控制器

$seasons= TeamRank::where('win', 1)->get();

查看

@foreach($seasons as $win)
    <strong>{{$win->year}} Winner</strong>
    {{$win->am}}
@endforeach

看简单吧

所以关于你的问题,我认为这是最好的方法:

控制器

$years = [2006,2007,2008];
$YearsWins = [];

foreach($years as $year){
 $YearsWins[$year] =  TeamRank::select('am')
  ->where($year, 1)
  ->first()->am;     
}

查看

 @foreach($YearsWins as $year=>$name)        
        <strong>{{$year}} Winner</strong>
        {{$name}}
 @endforeach

【讨论】:

  • $seasons =( [ 2005, 2006,2007]) $seasonWins=[]; foreach($seasons as $season) { $seasonWins[$season]=GameData::select('team') ->where('win', '1') ->where('stage', 'R16') - >where('round', 'final') ->where('elimination', '1') ->where('year', $season) ->get();我用这个得到:[{"team":"06 France"}],我怎样才能让这些括号消失
  • 你的意思是 $seasonWins 返回 [{"team":"06 France"}] ??
  • 我想通了,在上面的评论中,get();需要是价值('团队);你得到的只是没有括号的团队。
【解决方案2】:
$champions = DB::table('your_table_name')
            ->groupBy('year_column_name')
            ->having('ranking_column_name', '=', 1)
            ->get();

你可以像上面那样做,然后@foreach($champions as $c) 然后休息。

【讨论】:

  • 我会立即尝试...我确实对此表示赞同,但还没有足够的积分供公众投票,抱歉
  • 这行不通,因为我的列是我的年份,2005 年、2006 年等。
猜你喜欢
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2018-06-16
  • 2014-08-13
  • 1970-01-01
  • 2014-02-05
相关资源
最近更新 更多