我有以下表格:
阶段,下注,bet_type。
一个阶段有很多赌注,一个赌注属于一个阶段,一个赌注有很多bet_types,一个bet_type属于许多赌注(多对多)。
我希望能够返回给定阶段的所有投注和每次投注的bet_types(投注由许多bet_types组成)。
例如:
Phase table:
id name
1 phase1
Bet table:
id name phase
1 bet1 1
2 bet2 1
Bet_Type table:
id name
1 bet_type1
2 bet_type2
Bet_Bet_Type (connection table):
bet_id bet_type_id
1 1
1 2
2 1
我想得到的结果是:
{
bets:
[
{
id: 1,
name: "bet1",
bet_type:
[
{
id: 1,
name: "bet_type1"
},
{
id: 2,
name: "bet_type2"
}
]
},
{
id: 2,
name: "bet2",
bet_type:
[
{
id: 1,
name: "bet_type1"
}
]
}
]
}
我知道如何获得阶段的所有赌注,例如:
$bets = Phase::find($phaseId)->bets()->get();
但我怎样才能得到上述内容?
答案 0 :(得分:1)
你可以试试这个:
$phase = Phase::with('bets.betTypes')->find($phaseId);
这需要声明关系方法:
// Phase Model
public function bets()
{
return $this->hasMany('Bet');
}
// Bet Model
public function betTypes()
{
return $this->belongsToMany('BetType');
}
// BetType Model
public function bets()
{
return $this->belongsToMany('Bet');
}
所以你可以使用这样的东西:
$phase = Phase::with('bets.betTypes')->find($phaseId);
// Get all bets
$bets = $phase->bets;
// Get all betTypes from first Bet
$betTypes = $phase->bets->first()->betTypes;
// Get all betTypes from second Bet
$betTypes = $phase->bets->get(1)->betTypes;
// Get first betType from second Bet
$betType1 = $phase->bets->get(1)->betTypes->get(0); // or first()
如果你在视图中循环(Blade
):
{{ $phase->name }}
@foreach($phase->bets as $bet)
{{ $bet->name }}
@foreach($bet->betTypes as $betType)
{{ $betType->name }}
@endforeach
@endforeach