Laravel 元素后切片集合

Laravel slice collection after an element

所以我有这个模型,它将命名为 Clients 客户有

  1. id int PK
  2. 名称 varchar
  3. phone 整数
  4. 城市变量
  5. 活跃的tinyint

我选择这种方式来获取按城市分组的 phone 个号码

return Clients::select('name','phone','city')->selectSub('lpad(phone,1,'0'))->where('active',1)->groupBy('city')->paginate(10);

我想从某个客户端将集合切片为子集合,换句话说,如果我有以下输出:

  1. 约翰 0123456 巴黎
  2. 杰克 0255664 蒙特利尔
  3. 简 0165656 伦敦
  4. 弗雷德 0164465 多伦多
  5. 琼 0556494 巴塞罗那
  6. 皮特 0656897 罗马

我如何继续对这个集合进行切片以获得最后 2 个项目(最后 4 个项目,6 个项目......换句话说来自条目 I select) 我知道 Laravel 有一个用于集合的 slice 方法,但是如何动态地做到这一点? 谢谢。

$records = Clients::select('name','phone','city')->selectSub('lpad(phone,1,'0'))->where('active',1)->groupBy('city')->paginate(10);

假设 $name = "Jane"

$value = collect($records)->filter(function($value) use ($name) {
    return $value->name === $name;
})->keys()->first();

这里 $value 将保存 Jane 的索引。

现在可以通过

实现切片
$records = collect($records)->slice($value, 2)->all();

但是有一个副作用,如果找不到该名称,您将获得 $value 为 null。在处理切片之前检查$value是否为null。