Доступ к значению сводной таблицы через модель, которая относится к обеим сводным моделям - PullRequest
0 голосов
/ 30 ноября 2018

Скажем, у меня есть таблица матчей для игры, в которой счет противника сохраняется за матч, и в матче может участвовать любое количество игроков, в настоящее время отношения выглядят так:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...