laravel 嵌套 foreach 3 层
laravel nested foreach for 3 levels
我正在处理一个 api,我需要 return 数据如下。
{
"Gamelist": {
"MarketList": {
"SelectionList": {}
}
}
}
我使用以下方法
$eventId = 1;
$sportId = 1;
$leagueId = 1;
$events = $this->baseEvents->filterEventsBy($sportId, $eventId, $leagueId);
//get all the markets for events
$eventMarkets = $this->baseMarkets->getAllMarketsByEventId($events->pluck('s_base_event_id'));
//get all the selections for market
$marketSelections = $this->baseSelections->getAllSelectionsByMarketId($eventMarkets->pluck('s_base_market_id'));
这个项目有这样的关系。一个游戏有很多markets.one 市场有很多选择。我需要按照上面的 json 格式获取这些。我怎样才能做到这一点?我正在使用以下 foreach 结构。
foreach ($events as $event) {
$markets = $eventMarkets->where('s_base_event_id', $event->s_base_event_id);
foreach ($markets as $market) {
$selections = $marketSelections->where('s_base_market_id', $market->s_base_market_id);
foreach($selections as $selection){
}
}
}
要求的功能
public function filterEventsBy($sportId = null, $eventId = null, $leagueId = null){
$events = $this->model->join('sports_base_rounds', 'sports_base_rounds.s_base_round_id', '=', 'sports_base_events.s_base_round_id')
->join('sports_base_seasons', 'sports_base_rounds.s_base_season_id', '=', 'sports_base_seasons.s_base_season_id')
->join('sports_base_leagues', 'sports_base_seasons.s_base_league_id', '=', 'sports_base_leagues.s_base_league_id')
->join('sports_base_regions', 'sports_base_regions.s_base_region_id', '=', 'sports_base_leagues.s_base_region_id')
->join('sports_base_sports', 'sports_base_sports.s_base_sport_id', '=', 'sports_base_leagues.s_base_sport_id');
if ($sportId)
$events->where('sports_base_sports.s_base_sport_id', $sportId);
if ($leagueId)
$events->where('sports_base_leagues.s_base_league_id', $leagueId);
if ($eventId)
$events->where('s_base_event_id', $eventId);
else
$events->where('s_base_event_start_time', '>', Carbon::now());
return $events->get();
}
public function getAllSelectionsByMarketId($marketId){
$selections = $this->model->whereIn('s_base_market_id', $marketId)
->get();
if(!$selections) return null;
return $selections;
}
public function getAllMarketsByEventId($eventId){
$markets = $this->model->whereIn('s_base_event_id', $eventId)
->get();
if(!$markets) return null;
return $markets;
}
格式化数组数据,试试这个
$data = [];
$eventId = 1;
$sportId = 1;
$leagueId = 1;
$events = $this->baseEvents->filterEventsBy($sportId, $eventId, $leagueId);
//get all the markets for events
$eventMarkets = $this->baseMarkets->getAllMarketsByEventId($events->pluck('s_base_event_id'));
//get all the selections for market
$marketSelections = $this->baseSelections->getAllSelectionsByMarketId($eventMarkets->pluck('s_base_market_id'));
foreach($events as $index => $event){
forach($eventMarkets as $indx => $market){
foreach($marketSelections as $section){
if($section->s_base_market_id == $market->id && $market->s_base_event_id == $event->id){
$data['GameList'][$index]['MarketList'][$indx]['SelectionList'][] = $section->toArray();
}
}
}
}
$jsonData = json_encode($data);
我正在处理一个 api,我需要 return 数据如下。
{
"Gamelist": {
"MarketList": {
"SelectionList": {}
}
}
}
我使用以下方法
$eventId = 1;
$sportId = 1;
$leagueId = 1;
$events = $this->baseEvents->filterEventsBy($sportId, $eventId, $leagueId);
//get all the markets for events
$eventMarkets = $this->baseMarkets->getAllMarketsByEventId($events->pluck('s_base_event_id'));
//get all the selections for market
$marketSelections = $this->baseSelections->getAllSelectionsByMarketId($eventMarkets->pluck('s_base_market_id'));
这个项目有这样的关系。一个游戏有很多markets.one 市场有很多选择。我需要按照上面的 json 格式获取这些。我怎样才能做到这一点?我正在使用以下 foreach 结构。
foreach ($events as $event) {
$markets = $eventMarkets->where('s_base_event_id', $event->s_base_event_id);
foreach ($markets as $market) {
$selections = $marketSelections->where('s_base_market_id', $market->s_base_market_id);
foreach($selections as $selection){
}
}
}
要求的功能
public function filterEventsBy($sportId = null, $eventId = null, $leagueId = null){
$events = $this->model->join('sports_base_rounds', 'sports_base_rounds.s_base_round_id', '=', 'sports_base_events.s_base_round_id')
->join('sports_base_seasons', 'sports_base_rounds.s_base_season_id', '=', 'sports_base_seasons.s_base_season_id')
->join('sports_base_leagues', 'sports_base_seasons.s_base_league_id', '=', 'sports_base_leagues.s_base_league_id')
->join('sports_base_regions', 'sports_base_regions.s_base_region_id', '=', 'sports_base_leagues.s_base_region_id')
->join('sports_base_sports', 'sports_base_sports.s_base_sport_id', '=', 'sports_base_leagues.s_base_sport_id');
if ($sportId)
$events->where('sports_base_sports.s_base_sport_id', $sportId);
if ($leagueId)
$events->where('sports_base_leagues.s_base_league_id', $leagueId);
if ($eventId)
$events->where('s_base_event_id', $eventId);
else
$events->where('s_base_event_start_time', '>', Carbon::now());
return $events->get();
}
public function getAllSelectionsByMarketId($marketId){
$selections = $this->model->whereIn('s_base_market_id', $marketId)
->get();
if(!$selections) return null;
return $selections;
}
public function getAllMarketsByEventId($eventId){
$markets = $this->model->whereIn('s_base_event_id', $eventId)
->get();
if(!$markets) return null;
return $markets;
}
格式化数组数据,试试这个
$data = [];
$eventId = 1;
$sportId = 1;
$leagueId = 1;
$events = $this->baseEvents->filterEventsBy($sportId, $eventId, $leagueId);
//get all the markets for events
$eventMarkets = $this->baseMarkets->getAllMarketsByEventId($events->pluck('s_base_event_id'));
//get all the selections for market
$marketSelections = $this->baseSelections->getAllSelectionsByMarketId($eventMarkets->pluck('s_base_market_id'));
foreach($events as $index => $event){
forach($eventMarkets as $indx => $market){
foreach($marketSelections as $section){
if($section->s_base_market_id == $market->id && $market->s_base_event_id == $event->id){
$data['GameList'][$index]['MarketList'][$indx]['SelectionList'][] = $section->toArray();
}
}
}
}
$jsonData = json_encode($data);