Laravel在所有列中循环

时间:2018-06-23 16:18:32

标签: php laravel for-loop foreach

有人可以帮助我提高我的代码效率吗?我试图显示每年的冠军,但我不知道如何循环浏览每一年,而是逐年查看并显示记录和冠军,我觉得这在刑事上效率低下.....这是我的控制者和观点。

控制器

$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语句中循环通过吗?

2 个答案:

答案 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