我在控制器的方法中有这两个查询:
$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]);
第一种用于刀片:
@foreach($tools as $tool)
{{$tool->name}}
...
@endforeach
然而,第二个在javascript中用作:
<script>
eventSources: [
{
events:
{!! $keys !!},
color: 'black',
textColor: 'red'
}
]
</script>
如何简化这两个查询并合并为一个?
答案 0 :(得分:1)
预先准备的方式是:
$tools = Tool::whereDate('tool_date','>',$now)->orderBy('tool_date')->take(3)->get();
合并作为常规:
$keys = Tool::select('name as title','tool_date as start')->whereDate('start','>',$now)->orderBy('start')->take(3)->get();
但在您的情况下,您无法合并,因为您希望处理查看和脚本的不同数据
,尝试合并并进行以下更改,看看您是否想要:
@foreach($keys as $key)
{{$key->name}}
...
@endforeach
<script>
eventSources: [
{
events:
{!! $keys->toJson !!},
color: 'black',
textColor: 'red'
}
];
</script>
答案 1 :(得分:1)
PHP:
$tools=Tool::select('name as title','tool_date as start')->where('tool_date','>',$now)->orderBy('tool_date')->get();
return view('index')->with(['tools'=>$tools]);
首次使用刀片:
@foreach($tools->take(3) as $tool
{{$tool->title}}
...
@endforeach
第二次使用:
<script>
eventSources: [
{
events:
{!! $tools->toJson() !!},
color: 'black',
textColor: 'red'
}
]
这是一个查询,并管理集合。
答案 2 :(得分:1)
好的,这可以为您提供与现有查询完全相同的结果,并使用单个数据库提取。
$allTools = Tool::all();
$tools = $allTools->filter(function ($tool) use ($now) {
return \Carbon\Carbon::parse($tool->tool_date)->gt(\Carbon\Carbon::parse($now));
})->sortBy('tool_date')->take(3);
$keys = $allTools->transform(function ($tool) {
return [
'title' => $tool->name,
'start' => $tool->tool_date
];
})->toJson();
在你的问题中,你会获取钥匙的每个工具,但是你已经接受了一个答案,它为你提供了只符合你第一个条件的工具钥匙。