簡體   English   中英

在收集過濾器方法中使用 where 條件 - Laravel

[英]Using where condition inside collection filter method - Laravel

如果它的屬性值低於當前月份,我有一個要過濾的集合。 為此,我在集合過濾器方法中使用 whereBetween 方法,但它不過濾任何項目並按原樣返回整個集合。

我正在使用 Laravel 5.8

這是我的代碼

碳日期

public $c_som, $c_eom

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

收藏

"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"
        }
]

過濾方法

$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]);
        });

我認為使用whereBetween()不太正確,因為這些屬性是string ,而someomCarbon的實例。

如果您想從集合中獲取dojclaw_back_date為當前月份的項目,則只需通過首先將string轉換為Carbon實例來比較該屬性。

        $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;

        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM