1
私は実際にEloquentとその動作について少し混乱しています。私はちょうど私の方法は、Eloquent
ORMの悪い習慣やオーバーヘッドではない方法を知りたいです。 これは私のClassroom
モデルLaravelで複数のクエリをフェッチする方法はありますか?
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
範囲でそれにクエリを実行したいです最終的にはlaravelのネイティブクラスBuilder
のようになります。
静的関数を使用する代わりに、モデルでクエリスコープを使用できます。アイテムをグループ化する方法が異なる場合は、3つのクエリを実行するよりも優れた解決策はありませんが、アイテム数が限られている場合は、代わりにLaravelのコレクションメソッドを使用してグループ化できます。これらはすべてlaravel.com/docsに記載されています。 – Devon
クエリスコープをありがとう、ありがとう、私は今のところ質問の道を行く。 – no0ob
@Devonは実際にコレクションをテストしましたが、Collectionの 'groupBy()'に配列を渡すことは不可能です。 'groupby' argは' Callable \ String'です – no0ob