Laravel 查找包含特定字符串值的项目

Laravel find an item contains specific string value

table 上的一个字段包含一个包含比赛信息的对象(两队名称、两队得分等)。我的问题是如何检查某个项目是否包含特定的 competitorId 值?

Table 字段值

[{
    "competitorType": "TEAM",
    "competitorName": "Team A",
    "competitorId": 40000,
    "linkDetailCompetitor": "\/v1\/basketball\/teams\/40000",
    "scoreString": "85",
    "scoreSecondaryString": "",
    "completionStatus": "COMPLETE",
    "resultPlacing": 0,
    "isDrawn": 0,
    "isHomeCompetitor": 0,
    "teamId": 40000,
    "teamName": "Team A",
    "teamNameInternational": "",
    "teamNickname": "A",
    "teamNicknameInternational": "",
    "teamCode": "TA",
    "teamCodeInternational": "",
    "website": "",
    "internationalReference": "",
    "externalId": "71",
    "clubId": 1067,
    "clubName": "Team A",
    "clubNameInternational": "",
}, {
    "competitorType": "TEAM",
    "competitorName": "Team B",
    "competitorId": 40001,
    "linkDetailCompetitor": "\/v1\/basketball\/teams\/40001",
    "scoreString": "89",
    "scoreSecondaryString": "",
    "completionStatus": "COMPLETE",
    "resultPlacing": 1,
    "isDrawn": 0,
    "isHomeCompetitor": 1,
    "teamId": 40001,
    "teamName": "Team B",
    "teamNameInternational": "",
    "teamNickname": "B",
    "teamNicknameInternational": "",
    "teamCode": "TB",
    "teamCodeInternational": "",
    "website": "",
    "internationalReference": "",
    "externalId": "72",
    "clubId": 1095,
    "clubName": "Team B",
    "clubNameInternational": "",
}]

模型方法

public static function getTeamWinLossRecord($competitionId, $teamId) {
    $data = self::select('competitors')
            ->where('competitionId', $competitionId)
            ->get()
            ->map(function($item, $teamId){
                return $item->competitors;
            });
    dd($data);
}

返回数据

Collection {#396 ▼
  #items: array:120 [▼
    0 => "[{"competitorType":"TEAM","competitorName":"Team A","competitorId":40000,"linkDetailCompetitor":"\/v1\/basketball\/teams\/40000","scoreString":"95","score ▶"
    1 => "[{"competitorType":"TEAM","competitorName":"Team C","competitorId":40001,"linkDetailCompetitor":"\/v1\/basketball\/teams\/40001","scoreString":"84", ▶"

您可以使用 php 函数 in_array() 搜索特定的字符串值

字体:https://secure.php.net/manual/en/function.in-array.php

使用flatten使所有对象处于同一级别,然后使用filterwhereIn过滤。

$newData = $data->flatten()->filter(function($val) {
    return $val->competitorId === "someIdid"
)}

更多详情可以查看laravel filter and whereIn