Скажем, у меня есть таблица матчей для игры, в которой счет противника сохраняется за матч, и в матче может участвовать любое количество игроков, в настоящее время отношения выглядят так:
class Match extends Model {
public function players() {
return $this->belongsToMany(Player::class)->withPivot(['score']);
}
}
class Player extends Model {
public function matches() {
return $this->belongsToMany(Match::class)->withPivot(['score']);
}
}
Это работаетхорошо, я могу получить игроков матча и получить очки каждого игрока за этот матч через сводную таблицу.Я предполагаю, что я делаю это очень правильно.
Затем мы представляем третью модель, которая легко относится к обеим моделям и отслеживает, на кого делают ставки зрители игрового места:
class Bet extends Model {
// get the match the bet is for
public function match() {
return $this->belongsTo(Match::class);
}
// get the player the bet is for
public function player() {
return $this->belongsTo(Player::class);
}
}
Но затем мы решаем, что хотим показать список ставок и окончательный счет игрока в матче, связанный с этой ставкой, например, $bet->playerWithMatch->pivot->score
.Но очевидно, что Bet
не связан с Player
через сводку, однако он разделяет обе взаимосвязи, которые сводка существует для объединения, поэтому уже есть вся информация для непосредственного присоединения к сводной таблице.
Конечно, можно просто получить соответствующий матч, а затем пройтись по игрокам этого матча, например:
foreach ($bet->match->players as $player) {
if ($player->id == $bet->player->id) {
// yay, we got it!
return $player->pivot->score;
}
}
// this should never happen... oh but wait, isn't this a sign of bad design patterns or something?
// should we not find a way to more Eloquently represent all of this? hmm...
return null;
Но я бы предпочел более простой, встроенный способ, которым я могу делать прямо впервоначальный запрос и он доступен в шаблоне Blade, например, и я чувствую, что должен быть какой-то способ сделать это, что я пропускаю?Без выполнения чрезмерного количества запросов и / или нарушения моей способности использовать нумерацию страниц Laravel?