在集合过滤器方法中使用where条件-Laravel

时间:2019-11-03 10:29:14

标签: php laravel-5 collections

我有一个要过滤的集合,如果它的属性值低于当月。为此,我在集合过滤器方法中使用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]);
        });

1 个答案:

答案 0 :(得分:0)

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

如果您想从集合中获取dojclaw_back_date是当月的项目,则只需通过将string强制转换为{{1 }}实例。

Carbon