Day23 跟着官方文件学习Laravel-Collection

Laravel提供了一个方便且好用的方式包装资料,并提供一系列方法处理资料,方便你在处理业务逻辑的同时清楚描述你的程序在做什麽。

他实作了以下介面使得它具有更多的功能性,包含

ArrayAccess
Countable
IteratorAggregate
JsonSerializable

Arrayable
Jsonable

以下会整理一些我在官方文件上看到Collection使用方法及我可能会常使用的method。

如何创建collection

  1. 利用全域方法collect即可将物件转化成collection
$collection = collect([1, 2, 3]);
  1. static method
$collection = Collection::make([1, 2, 3]);
  1. new Collection
$collection = new Collect([1, 2, 3]);

可扩展性

我们可以利用macro方法,透过closure去达成延展功能。这例子是帮它添加一个toUpper方法

Collection::macro('toUpper', function () {
    return $this->map(function ($value) {
        return Str::upper($value);
    });
});

$collection = collect(['first', 'second']);

$upper = $collection->toUpper();

可用方法

他提供非常多的方法,我这边简单整理一些我在实务中有用过的一些方法

  1. only

only可以将你的Collection筛选出你想要的key

$collection = collect([
    'product_id' => 1,
    'name' => 'Desk',
    'price' => 100,
    'discount' => false
]);

$filtered = $collection->only(['product_id', 'name']);

$filtered->all();

// ['product_id' => 1, 'name' => 'Desk']
  1. map
    可以对这个Collection中的元素去做一些改变
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
    return strtoupper($name);
});

  1. filter
    可以对这个Collection中的元素去做一些筛选
$collection = collect([1, 2, 3, 4]);

$filtered = $collection->filter(function ($value, $key) {
    return $value > 2;
});

$filtered->all();

等等,还有很多可以摸索的功能,我也没有全部都用过,等到之後有需求时,再来翻翻。

再来我要介绍的是另一个Eloquent collection,Eloquent方法中回传的是Illuminate\Database\Eloquent\Collection类的实例,他也继承了基础的collection,所以可以使用基础collection的方法。

$names = User::all()->reject(function ($user) {
    return $user->active === false;
})->map(function ($user) {
    return $user->name;
});

不过有一点要注意的是绝大多数的方法在Eloquent collection中回传是Eloquent collection,但有些方法他回传的会是base collection,包括以下。

好~今天就看到这边,明天再来看看其他有趣的功能吧!


<<:  Day22 - 使用 Flex Message 提升用户体验

>>:  [DAY 22]纠团通知功能(2/3)

DAY 17 制作 Nav Bar - Header

整个画面中最先看到的是 header 的 nav bar ,就让我们从这里开始刻吧! 首先在 App...

Day20,Grafana Loki 不一样的log选择

正文 今天要安装的是一套Grafana LAB出产、针对Logging的解决方案Grafana Lo...

BEM 基础介绍 DAY41

BEM B: Block(区块) E: Element(元素) __ 双下底线 M: Modifir...

Sequencer 分析你的 Session Cookie 与 Token 规律性

Sequencer这项功能是针对随机的参数, 譬如说像是Session cookie或是Token进...

Day18,ArgoCD ( 1 / 2 )

正文 今天要来装GitOPs的工具之一,ArgoCD 透过helm来安装 helm repo add...