Php 多次切片采集

Php 多次切片采集,php,laravel,Php,Laravel,我收集了一堆数据 我正在努力做到以下几点 获取前18个结果并将其吐出来 使用循环获取特定位置的前3个结果,并将每个结果吐出 下面是我尝试执行的示例代码: $data = DataChampion::query() ->selectRaw(' static_champions.name as champion_name, static_champions.slug as champion_slug, static_champions.image as champi

我收集了一堆数据

我正在努力做到以下几点

  • 获取前18个结果并将其吐出来
  • 使用循环获取特定位置的前3个结果,并将每个结果吐出
下面是我尝试执行的示例代码:

$data = DataChampion::query()
    ->selectRaw('
        static_champions.name as champion_name, static_champions.slug as champion_slug, static_champions.image as champion_image,
        static_lanes.slug as lane_slug, static_tiers.slug as tier_slug, static_patches.slug as patch_slug,
        ((sum(data_champions.wins) / sum(data_champions.matches)) * 100) as win_rate
    ')
    ->leftJoin('static_champions', 'static_champions.id', 'data_champions.static_champion_id')
    ->leftJoin('static_lanes', 'static_lanes.id', 'data_champions.static_lane_id')
    ->leftJoin('static_tiers', 'static_tiers.id', 'data_champions.static_tier_id')
    ->leftJoin('static_patches', 'static_patches.id', 'data_champions.static_patch_id')
    ->where('data_champions.static_patch_id', StaticPatch::orderByDesc('id')->first()->id)
    ->groupBy('data_champions.static_champion_id')
    ->orderByDesc('win_rate')
    ->get();

foreach ($data->splice(0, 18) as $data) {
    echo $data->champion_name . '<br>';
}

foreach (['top', 'middle', 'bottom'] as $lane_slug) {
    foreach ($data->where('lane_slug', $lane_slug)->splice(0, 3) as $data) {
        echo $lane_slug . ' - ' . $data->champion_name . '<br>';
    }
}
$data=DataChampion::query()
->选择原始('
静态冠军。名称为冠军名称,静态冠军。鼻涕虫为冠军鼻涕虫,静态冠军。形象为冠军形象,
静态\u车道。段塞作为车道\u段塞,静态\u层。段塞作为层\u段塞,静态\u补丁。段塞作为补丁\u段塞,
((总和(数据冠军.胜利)/总和(数据冠军.比赛))*100)作为获胜率
')
->leftJoin('static\u champions'、'static\u champions.id'、'data\u champions.static\u champion\u id')
->leftJoin('static\u lanes','static\u lanes.id','data\u champions.static\u lane\u id'))
->leftJoin('static_tiers'、'static_tiers.id'、'data_champions.static_tier_id')
->leftJoin('static\u patches'、'static\u patches.id'、'data\u champions.static\u patches\u id')
->其中('data\u champions.static\u patch\u id',StaticPatch::orderByDesc('id')->first()->id)
->groupBy('data\u champion.static\u champion\u id')
->orderByDesc('赢得率')
->get();
foreach($data->拼接(0,18)为$data){
echo$data->champion_name.“
”; } foreach(['top'、'middle'、'bottom']作为$lane_slug){ foreach($data->where($lane\u slug',$lane\u slug)->拼接(0,3)为$data){ echo$lane_slug.'-'.$data->champion_name.
'; } }
我不断得到错误:

调用未定义的方法Illumb\Database\Eloquent\Builder::splice()

当我删除
foreach(['top','middle')…
整个循环时,它似乎对前18个结果有效


如何从单个集合中获取所需的数据,以便不必对同一数据使用多个查询?

可能是因为您在该foreach中添加了一个where,集合将变成一个查询生成器,请尝试添加一个->get()在where之后

可能是因为您在该foreach中添加了where,集合变成了一个查询生成器,尝试在where之后添加一个->get(),如下更改几行-在迭代集合时不能使用相同的变量名(即$data)

foreach($data->拼接(0,18)为$val){
echo$val->champion_name.“
”; } foreach(['top'、'middle'、'bottom']作为$lane_slug){ foreach($data->where($lane\u slug',$lane\u slug)->拼接(0,3)为$val){ echo$lane_slug.'-'.$val->champion_name.
'; } }
如下更改几行-在迭代集合时不能使用相同的变量名(即$data)

foreach($data->拼接(0,18)为$val){
echo$val->champion_name.“
”; } foreach(['top'、'middle'、'bottom']作为$lane_slug){ foreach($data->where($lane\u slug',$lane\u slug)->拼接(0,3)为$val){ echo$lane_slug.'-'.$val->champion_name.
'; } }
foreach ($data->splice(0, 18) as $val) {
    echo $val->champion_name . '<br>';
}

foreach (['top', 'middle', 'bottom'] as $lane_slug) {
    foreach ($data->where('lane_slug', $lane_slug)->splice(0, 3) as $val) {
        echo $lane_slug . ' - ' . $val->champion_name . '<br>';
    }
}