Laravel 小技巧

1、collection和array

getCollection()方法可以从分页数据中获取真实的数据(比如分页中的课程数据),setCollection()方法可以将真实数据设置进分页数据,collect()方法可以将数组数据转化为集合数据。

$result = Category::query()
            ->where('is_directory', true)  // 由于这里选择的是父类目,因此需要限定 is_directory 为 true
            ->where('name', 'like', '%'.$search.'%')
            ->paginate();
            
 $result->setCollection($result->getCollection()->map(function (Category $category) {
            return ['id' => $category->id, 'text' => $category->full_name];
        }));           
 //集合和数组互转
$collection = collect([1, 2, 3]);
$array = $collection->toArray();     
2、$casts属性转换

$casts属性转换相当于快速版的获取器和修改器

protected $casts = [
        'status' => 'boolean',
    ];

数据库中status 值为0或1,设置$casts 后,插入数据库插入数据库模型自动将status=true转换为1,查询数据的时候会自动将status=1转成查询结果中的status=》true,查询条件中也可以直接使用where(‘status’,true)。

3、map和transform
  • map 不改变本身,只改变返回值
  • transform 改变本身,也改变返回值
$collection = collect([1, 2, 3]);

// 使用 map() 方法返回一个新的集合
$mapped = $collection->map(function ($item) {
    return $item * 2;
});
$mapped->all(); // [2, 4, 6]
$collection->all(); // [1, 2, 3]

// 使用 transform() 方法修改原始集合
$mapped = $collection->transform(function ($item) {
    return $item * 2;
});

$mapped->all(); // [2, 4, 6]
$collection->all(); // [2, 4, 6
4、map和filter连贯操作
$properties=collect($result['aggregations']['properties']['properties2']['buckets'])
                ->map(function ($bucket){
                    return [
                        'key'=>$bucket['key'],
                        //all方法简单返回集合表示的底层数组
                        'values'=>collect($bucket['properties3']['buckets'])->pluck('key')->all(),
                    ];
                })->filter(function ($property) use ($propertyFilters){//这里的filter 是值遍历上一步map中返回的数组,$property是接收者名称,可以随便起
                //上一步返回的数组如[	
                //					['key'=>'内存','values'=>['128G','256G','512G']],	
                //					['key'=>'传输','values'=>['DDR3','DDR4','DDR5']],
                //					]
                    // 过滤掉只剩下一个值 或者 已经在筛选条件里的属性,只有为真的才会留下来
                    return count($property['values']) > 1 && !isset($propertyFilters[$property['key']]) ;
                });
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值