Laravel цикл через все столбцы - PullRequest
0 голосов
/ 23 июня 2018

Может кто-нибудь помочь мне сделать мой код более эффективным ... Я пытаюсь отображать чемпионов из каждого года, и я не могу понять, как циклически проходить по каждому столбцу лет, а вместо этого прохожу по годам и показываю записи и чемпионы, которых я считаю преступно неэффективными ..... вот мой контролер и взгляд.

Контроллер

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

View

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

И у меня есть один из них для каждого цикла для каждого сезона в моей базе данных, где каждый столбец - это год. Чтобы быть понятным, мой код работает, но я чувствую, что должен быть способ перебрать каждый столбец. Могу ли я установить переменную в массив и сделать так, чтобы она проходила через различные операторы where?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Это не совсем то, что вы ищете, но это может помочь другим пользователям.

Никогда не следует использовать данные в качестве имени столбца.

в вашем коде годаявляется столбцом, поэтому каждый год необходимо добавлять дополнительный столбец или, другими словами, он не учитывается.поэтому никогда не создавайте таблицы, которые легко читаются человеком, но не для компьютера.Я думаю, ваш дизайн таблицы выглядит следующим образом:

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
0 голосов
/ 23 июня 2018
$champions = DB::table('your_table_name')
            ->groupBy('year_column_name')
            ->having('ranking_column_name', '=', 1)
            ->get();

вы можете сделать что-то вроде выше, затем @foreach ($ champions as $ c) и остальные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...