在Laravel中获取多个查询的替代方法是什么?

时间:2017-09-10 23:08:06

标签: php laravel eloquent

我对Eloquent及其运作方式实际上有点困惑。我只想知道即时通讯的方式对于Eloquent ORM来说不是一种糟糕的做法或开销。 这是我的Classroom模型

的一部分
static function classgradeList(){
    return Classroom::select('classgrade')
        ->groupBy('classgrade')
        ->orderBy('classgrade')
        ->get();
}
static function classsectionList(){
    return Classroom::select('classgrade','classsection')
        ->groupBy('classgrade','classsection')
        ->orderBy('classsection')
        ->get();
}
static function classnameList(){
    return Classroom::select('classgrade','classsection','classname')
        ->orderBy('classname')
        ->get();
}

这些功能背后的原因是在同一视图上为3个独立区域创建列表。我然后在同一视图中调用它们如下:

<ul id="classsections" class="dropdown-menu">
            @foreach(App\Classroom::classsectionList() as $csect)
                <li onclick="csselect(this)" data-cg="{{$csect->classgrade}}" data-cs="{{$csect->classsection}}" class="classsection">
                    <a>{{$csect->classsection}}</a>
                </li>
            @endforeach
        </ul>

 <ul id="classgrades" class="dropdown-menu">
            @foreach(App\Classroom::classgradeList() as $cgrade)
                <li onclick="cgselect(this);" data-cg="{{$cgrade->classgrade}}" >
                    <a>{{$cgrade->classgrade}}</a>
                </li>
            @endforeach
        </ul>

<ul id="classnames" class="dropdown-menu">
            @foreach(App\Classroom::classnameList() as $item)
                <li onclick="cnselect(this)" data-cg="{{$item->classgrade}}" data-cs="{{$item->classsection}}" data-cn="{{$item->classname}}" class="classname">
                    <a>{{$item->classname}}</a>
                </li>
            @endforeach
        </ul>

我认为这段代码会有开销,我希望以更好的方式实现它,例如获取所有内容并在php范围内对其进行查询,最终通过类似Builder laravel& #39;本地课程。

1 个答案:

答案 0 :(得分:1)

感谢@Devon的评论我已经克服了该集合的问题,我对Collection的groupBy函数有一些问题,它无法获取列数组,因为我为集合创建了另一个列,它是组合的两个目标栏如下。

$allClass->map(function ($classroom) {
        $classroom['sectgrade'] = $classroom['classgrade'].".".$classroom['classsection'];
        return $classroom;
    });