2017-06-15 129 views
0

表格中的一个字段包含一个包含游戏信息(包括团队名称,团队分数等)的对象。我的问题是如何检查一个项目是否包含具体的competitorId的值?Laravel找到一个包含特定字符串值的项目

表字段值

[{ 
    "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", ▶" 

回答

1

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

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

更多细节可以检查laravel filterwhereIn

相关问题