【问题标题】:Laravel extract a section on json objectLaravel 提取一个关于 json 对象的部分
【发布时间】:2020-09-14 16:40:04
【问题描述】:

我很难找到在我的数据库上查询 json 对象的方法。我会尽力解释我需要什么。我有一个几乎每天都会改变的对象,所以这就是我决定存储为 json 的原因

"crew": [
            {
                "Crew": "CA001",
                "count": "1",
                "Craft": "CA",
                "craftType": "Carpenters",
                "members": [
                    {
                        "Badge": "10484658",
                        "Name": "Cudmore Gregory",
                        "Class": "Carpenter GF",
                        "shift": "1"
                    },
                    {
                        "Badge": "10484913",
                        "Name": "Harris Thomas",
                        "Class": "Carpenter JM",
                        "shift": "1"
                    },
                    {
                        "Badge": "10484658",
                        "Name": "Cudmore Gary",
                        "Class": "Carpenter GF",
                        "shift": "2"
                    },
                    {
                        "Badge": "10484913",
                        "Name": "Harris Joe",
                        "Class": "Carpenter JM",
                        "shift": "2"
                    }
                ]
            }...

        ]

我需要做的是能够查询示例 where Crew = 'CA001' 或 members where shift = 2 and Only return a array with the match values.

到目前为止,我发现这个要查询,但它返回了所有对象!

        $crew = CtcCrew::where('userID', $user->userID)->where('companyID', $user->companyID)
        //->whereJsonContains('dataCrew', ['crew' => ['Crew' => 'CA001']])->first();
        ->whereJsonContains('dataCrew', ['crew' => ['members' => ['Badge' => '10484658']]])->first();

谢谢!

【问题讨论】:

    标签: jquery mysql json laravel


    【解决方案1】:

    我会这样做。请测试给定的代码并让我在下面的 cmets 中发布。

    // fetch crew data
    $crews = CtcCrew::where('userID', $user->userID)
        ->where('companyID', $user->companyID)
        ->first();
    
    
    // convert the crew information from json to an array
    $crewData = json_decode($crews->dataCrew, true);
    
    
    $return = collect($crewData)->map(function ($crew) {
        $memberFound = false;
        $memberFound = collect($crew['members'])->map(function ($member) {
            if ($member['shift'] == 2) {
                return true;
            }
        });
    
        if ($crew['Crew'] == 'CA001' || $memberFound) {
            return $crew;
        }
    })->filter();  // filter to remove null values
    

    【讨论】:

    • 我结束了这样的事情:$data = collect($CtcCrew->data['crew']); $crew = $data->where('crew', $crewID)->first();谢谢提示
    猜你喜欢
    • 2018-09-22
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多