Iはコントローラ方法におけるこれらの2つのクエリがありますどのように私はこれら2つの同様のクエリを簡素化するのですか?
$tools=Tool::where('tool_date','>',$now)->orderBy('tool_date')->get()->take(3);
$keys=Tool::select('name as title','tool_date as start')->get()->toJson();
return view('index')->with(['tools'=>$tools,'keys'=>$keys,'now'=>$now]);
最初は次のようにブレードに使用される:
<script>
eventSources: [
{
events:
{!! $keys !!},
color: 'black',
textColor: 'red'
}
]
</script>
:第二のようにJavaScriptで使用され、一方
@foreach($tools as $tool)
{{$tool->name}}
...
@endforeach
これらの2つのクエリを簡略化して1つにまとめるにはどうすればよいですか?
2つのクエリが似ておらず、2つの異なるデータセットを保持しています。便宜上、両方のデータを保持してビューに渡してそれに応じて使用する単一のコレクションまたは配列を作成することができます。それには本当のメリットはありません。また、 'get()'の前に 'take(3)'を使用する必要があります。そうでなければ、dbからすべての結果を取り出してから、3つのアイテムをd結果のコレクションから取り出します。 – Sandeesh
@Sandeesh私は2番目のコレクションにコレクションが必要ですが、最初のコレクションの3つしか取ることはできません。だから、もし単純化されたバージョンがあれば、私はこのtake(3)もあることを示しているだけです。 –
' - > get() - > take(3);'生成されたクエリは条件に一致するすべての行をフェッチし、フェッチ後にlaravelは結果に対して3行を取ります。これは不必要なリソースの無駄です。だから、あなたは ' - > take(3) - > get();'を実行し、データベースから直接3行しか取り出しません。 – Sandeesh