2015-12-16 94 views
3

所以我在我的'bugoverview'页面遇到了错误。 (多么讽刺).. 的顺序这种奇怪的方式来到我的知识之后的错误是laravel查询返回奇怪的顺序

不管怎么说问题所看到的画面(id : 7被删除)删除了数据库:

enter image description here

我得到了一个简单的刀片foreach中的所有行。

我的查询代码:

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

$projects_all = Project::all(); 

我的foreach代码:

@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

它是你发布的单个项目bug nummer吗? –

+0

没有那些是通过MySQL订购的5行。@BasheerAhmed –

+0

dd($ bugs_all-> toArray())在控制器中,看到的顺序? –

回答

1

这个问题包含了一些不确定性,没有看到一个ERD或桌/关系结构很难真正帮助。

但是,我假设您使用的是InnoDB,并且您没有正确订购关系。

首先,InnoDB是一个将重新使用已删除空间的引擎。例如:您创建记录1,2和3.然后删除记录2并创建记录4.缺省订单为auto_increment按升序排列(这不是按照id ASC明确排序)。

这样说你的错误的顺序如下:1,4,3 - 这只是因为记录4取代了记录2(之前被删除)的空间。其次,我只是建议你正确地建立你的关系。我假设你的项目与Bug有关?大意如下的东西就足够了:

// 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

的问题在你的情况是这样,你有一个外部循环遍历不同的项目。由于每个bug都与一个不同的项目相关联,因此检查项目ID会“破坏”错误的顺序。在您的代码中,每个项目都会订购错误....

但是,您甚至不需要外部循环。如果你在你的错误模型定义属于关联关系,你可以简单地访问盲蝽象:

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

所以,你必须对错误的项目的所有信息,并保持你定义的顺序。