有人可以帮助我提高我的代码效率吗?我试图显示每年的冠军,但我不知道如何循环浏览每一年,而是逐年查看并显示记录和冠军,我觉得这在刑事上效率低下.....这是我的控制者和观点。
控制器
$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语句中循环通过吗?
答案 0 :(得分:0)
$champions = DB::table('your_table_name')
->groupBy('year_column_name')
->having('ranking_column_name', '=', 1)
->get();
您可以执行上述操作,然后@foreach($ champions as $ c)并休息。
答案 1 :(得分:0)
这并不是您要找的东西,但这可能会对其他用户有所帮助。
永远不要将数据用作列名。
在您的代码中,年份是一列,因此,每年,您都必须添加额外的列,或者换句话说,这是不可数的。因此,切勿创建容易被人阅读但不适用于计算机的表。我猜你的表设计看起来像这样:
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
因此,假设您是使用last方法创建的,则可以访问如下数据:
控制器
$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