laravel查询返回奇怪的顺序

时间:2015-12-16 15:25:42

标签: php laravel laravel-5.1

所以我在我的' bugoverview '中遇到了错误。页。 (太讽刺了).. 在从数据库中删除了一个错误(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

2 个答案:

答案 0 :(得分:2)

您的案例中的问题是,您有一个遍历不同项目的外部循环。由于每个错误都与不同的项目相关联,因此您对项目ID的检查会“破坏”错误的排序。在您的代码中,每个项目都会对错误进行排序....

但你甚至不需要那个外循环。如果您在错误模型中定义 belongsTo 关系,则只需访问以下错误:

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

因此,您可以获得有关错误项目的所有信息,并保留您定义的顺序。

答案 1 :(得分:1)

这个问题含糊不清,没有看到ERD或你的表/关系结构,很难真正帮助。

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

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

据说你的错误顺序如下:1,4,3 - 这只是因为记录4取代了记录2的空间(以前删除过)。

其次,我只是建议你正确地建立你的关系。我假设您的项目与Bugs有关?以下几行就足够了:

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