2015-12-16 2 views
3

Так что я наткнулся на ошибку в моей 'bugoverview' страница. (Как иронично) .. этот странный способ для того пришел, насколько мне известно после того, как ошибка была удалена из базы данных (id : 7 был удален)запрос laravel возвращает странный порядок

В любом случае проблема, как показано на рисунке:

enter image description here

Я получаю все ряды в простой лезвие foreach.

мои коды запроса являются:

$bugs_all = Bug::with('klant','user')->orderBy('id','asc')->get(); 

и

$projects_all = Project::all(); 

мой Еогеасп код:

@foreach($projects_all as $project) 
    @foreach($bugs_all as $bug) 
     @if(count($bugs_all) > 0) 
      @if($bug->project_id == $project->id) 
       <tr> 
        <td>{{$bug->id}}</td> 
        <td>{{substr($bug->titel,0,15)}}...</td> 
        <td>{{$bug->status}}</td> 
        <td>{{$bug->soort}}</td> 
        <td> 
         @if($bug->prioriteit == 'laag') 
          <span class="label label-success">Laag</span> 
         @elseif($bug->prioriteit == 'gemiddeld') 
          <span class="label label-warning">Gemmideld</span> 
         @elseif($bug->prioriteit == 'hoog') 
          <span class="label label-danger">Hoog</span> 
         @elseif($bug->prioriteit == 'kritisch') 
          <span class="label label-purple">Kritisch</span> 
         @else 
          <span class="label label-info">Geen prioriteit</span> 
         @endif 
        </td> 
        <td>{{date('d-m-y - H:i',strtotime($bug->eind_datum))}}</td> 
        @if($bug->klant) 
         <td>{{$bug->klant->voornaam .' '.$bug->klant->tussenvoegsel.' '. $bug->klant->achternaam}}</td> 
        @endif 
        <td>{{$project->projectnaam}}</td> 
        @if($bug->user) 
         <td>{{$bug->user->voornaam .' '.$bug->user->tussenvoegsel.' '. $bug->user->achternaam}}</td> 
        @else 
         <td>Geen</td> 
        @endif 
        <td> 
         <a href="/bugchat/{{$bug->id}}" class=""> 
          <button type="submit" class="btn btn-success btn-xs"> 
           <i class="glyphicon glyphicon-search"></i> 
          </button> 
         </a> 
        </td> 
       </tr> 
      @endif 

     @endif 
    @endforeach 
@endforeach 
+0

Является ли это единственным номером ошибки, который вы опубликовали ...? –

+0

нет, это 5 строк, которые упорядочены через mysql [email protected] –

+0

dd ($ bugs_all-> toArray()) в контроллере и посмотреть порядок? –

ответ

1

Этот вопрос содержит некоторую двусмысленность, не видя ERD или вашей таблицы/отношения структура, которую трудно по-настоящему помочь.

Однако, я полагаю, вы используете InnoDB, и вы не упорядочиваете свои отношения правильно.

Прежде всего InnoDB - это двигатель, который будет повторно использовать удаленное пространство. Например: вы создаете записи 1, 2 и 3. Затем вы удаляете запись 2 и создаете запись 4. По умолчанию используется auto_increment в порядке возрастания (это явно не порядок id ASC).

С учетом сказанного порядок ваших ошибок выглядит следующим образом: 1, 4, 3 - это просто потому, что запись 4 заменила пространство записи 2 (которое было ранее удалено).

Во-вторых, я бы просто посоветовал правильно настроить ваши отношения. Я предполагаю, что ваши проекты связаны с ошибками? Что-то по следующим направлениям будет достаточно:

// Inside your Project model. 
public function bugs() 
{ 
    return $this->hasMany('App\Bug', 'bug_id', 'id') 
       ->orderBy('id', 'ASC'); 
} 

// Inside your Bug model. 
public function project() 
{ 
    return $this->belongsTo('App\Project', 'bug_id', 'id'); 
} 

Чтобы получить все ошибки для всех проектов:

$projects = Project::with('bug.klant', 'bug.user')->all(); 

Внутри шаблона лезвия, вы можете сделать:

@foreach ($project->bugs as $bug) 

    {{ $bug->user }} 
    {{ $bug->klant }} 

@endforeach 
+0

имел это несколько иное, но я получил его благодаря работе, –

+0

проблема была не в том, что двигатели баз данных и автоинкремент вообще;) Только внешняя петля через проекты вызвала проблему. но в любом случае. хороший ответ;) –

+0

@shock_gone_wild уверен, не проблема в этом случае, но информация о движке InnoDB может оказаться полезной для кого-то с аналогичной проблемой. – ash

2

проблемой в вашем case ist, что у вас есть внешний цикл, который проходит через разные проекты. Поскольку каждая ошибка связана с другим проектом, ваша проверка на идентификатор проекта «уничтожает» упорядочение ошибок. В вашем коде ошибки исправлены для каждого проекта ....

Но вам даже не нужен этот внешний контур. Если определить отношения belongsTo в модели вы ошибки вы могли бы просто получить доступ ошибки как:

@foreach($bugs_all as $bug) 
    $bug->project->projectnaam; 
    .... 
@endforeach 

Так у вас есть вся информация о проекте жука и сохранить определенный порядок.

Смежные вопросы