元素后的 Laravel 切片集合

Rez*_*azi 1 php collections slice laravel

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

  1. id int PK
  2. 名称 varchar
  3. 电话号码
  4. 城市变量
  5. 活跃的tinyint

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

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

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

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

我怎样才能继续切片这个集合以获得最后 2 个项目(最后 4 个项目,6 个项目......换句话说,来自我选择的条目)我知道 Laravel 有一个用于集合的切片方法,但如何做到这一点动态的?谢谢你。

Sar*_*mar 5

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

假设 $name = "Jane"

$value = collect($records)->filter(function($value) use ($name) {
    return $value->name === $name;
})->keys()->first();
Run Code Online (Sandbox Code Playgroud)

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

现在您可以通过以下方式实现切片

$records = collect($records)->slice($value, 2)->all();
Run Code Online (Sandbox Code Playgroud)

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