首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用where条件的收集过滤方法-- Laravel

使用where条件的收集过滤方法-- Laravel
EN

Stack Overflow用户
提问于 2019-11-03 10:29:14
回答 1查看 738关注 0票数 0

我有一个集合,如果它的属性值低于当前月份,我想对其进行筛选。为此,我在集合筛选方法中使用whereBetween方法,但它不过滤任何项并返回整个集合。

我用的是Laravel 5.8

这是我的密码

碳日期

代码语言:javascript
复制
public $c_som, $c_eom

$this->c_som = Carbon::now('Asia/Kolkata')->startOfMonth();
$this->c_eom = Carbon::now('Asia/Kolkata')->endOfMonth();

集合

代码语言:javascript
复制
"cm_revenue_data": [
        {
            "candidate_full_name": "Dr. Joanne Cruickshank",
            "revenue": 1777,
            "doj": "2019-11-16",
            "is_claw_back": 1,
            "claw_back_date": "2019-10-25"
        },
        {
            "candidate_full_name": "Mack Green",
            "revenue": 2718,
            "doj": "2019-07-28",
            "is_claw_back": 1,
            "claw_back_date": "2019-10-25"
        },
        {
            "candidate_full_name": "Mrs. Mireille Beer MD",
            "revenue": 1118,
            "doj": "2019-06-18",
            "is_claw_back": 1,
            "claw_back_date": "2019-10-25"
        },
        {
            "candidate_full_name": "Phoebe Quigley",
            "revenue": 1655,
            "doj": "2019-10-10",
            "is_claw_back": 1,
            "claw_back_date": "2019-11-13"
        },
        {
            "candidate_full_name": "Johnpaul Prosacco",
            "revenue": 1312,
            "doj": "2019-07-12",
            "is_claw_back": 1,
            "claw_back_date": "2019-10-25"
        },
        {
            "candidate_full_name": "Alene Moore DVM",
            "revenue": 2059,
            "doj": "2019-10-11",
            "is_claw_back": 0,
            "claw_back_date": null
        },
        {
            "candidate_full_name": "Vida Fisher",
            "revenue": 1955,
            "doj": "2019-09-07",
            "is_claw_back": 1,
            "claw_back_date": "2019-10-25"
        }
]

滤波方法

代码语言:javascript
复制
$cm_revenue_data = $revenue_data->filter(function ($item) {

            return $item
                ->whereBetween('doj', [$this->c_som, $this->c_eom]);
                ->orWhereBetween('claw_back_date', [$this->c_som, $this->c_eom]);
        });
EN

回答 1

Stack Overflow用户

发布于 2019-11-04 16:02:16

我认为使用whereBetween()并不完全正确,因为这些属性是string,而someomCarbon的实例。

如果您想从集合中获取dojclaw_back_date是当前月份的项,那么只需通过首先将string转换为Carbon实例来比较该属性。

代码语言:javascript
复制
        $array = [
            [
                'doj' => '2019-11-16',
                'claw_back_date' => '2019-10-25',
            ],
            [
                'doj' => '2019-10-10',
                'claw_back_date' => '2019-11-13',
            ],
            [
                'doj' => '2019-06-18',
                'claw_back_date' => '2019-10-25',
            ],
        ];


        $now = Carbon::now();

        $collection = collect($array)->filter(function ($item) use ($now) {
            if (Carbon::createFromFormat('Y-m-d', $item['doj'])->month === $now->month) {
                return true;
            }

            if (Carbon::createFromFormat('Y-m-d', $item['claw_back_date'])->month === $now->month) {
                return true;
            }

            return false;

        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58679267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档