Laravel - Get Сбор всех данных, полученных из полиморфных отношений - PullRequest
0 голосов
/ 13 октября 2018

Я хотел бы получить все данные (результаты строки) из Полиморфного отношения внутри одной Коллекции элементов

Вот сценарий:

matches table
--id

match_details_pivot table
--id
--match_id_fk   # a foreign key on match.id table
--details_id    # polymorphic relation model id
--details_type  # polymorphic relation model

match_details_football table
--id
--match_details_id_fk

Отношение выглядит следующим образом:

Match -> hasOne MatchDetailsPivot -> hasMany MatchDetailsFootball

Модели Laravel:

class Match extends Model
{
    protected $table = 'matches';

    public function details()
    {
        return $this->hasOne(MatchDetails::class, 'match_id_fk');
    }
}

class MatchDetailsPivot extends Model
{
    const MORPH_ID      =   'details_id';
    const MORPH_COLUMN  =   'details_type';

    protected $table = 'match_details_pivot';

    public function match()
    {
        return $this->belongsTo(Match::class, 'id', 'match_id_fk');
    }

    public function matchData()
    {
        return $this->morphTo('matchData', self::MORPH_COLUMN, self::MORPH_ID);
    }
}

class MatchDetailsFootball extends Model
{
    protected $table = 'match_details_football';

    public function matchDetails()
    {
        return $this->morphMany(MatchDetailsPivot::class, 'matchData');
    }
}

Пример сценария:

  • Совпадения таблица содержит 1 запись сID = 50
  • Match_details_pivot таблица содержит 1 запись с идентификатором 12, с внешним идентификатором , указывающим на таблицу совпадений,это id 50 .
  • Таблица Match_details_pivot также имеет полиморфное отношение к загрузке модели MatchDetailsFootball с ID = 15
  • Match_Details_Football таблица содержит 2 записей с ID 15 и 16 , и у них обоих есть ссылка внешнего ключа, указывающая на сводную таблицу,это id 12

Пример записи таблицы из приведенного выше сценария:

matches
id    
50

match_details_pivot
id    match_id_fk    details_id    details_type
12    50             15            MatchDetailsFootball


match_details_football
id    match_details_id_fk    score    team
15    12                     5        Manchester
16    12                     5        Arsenal

A Проблема: полиморфное отношение в сводной таблице, по умолчанию загружается столбец ID полиморфной таблицы (match_details_football.id), однако мне нужно, чтобы он указывал на другой столбец внешнего идентификатора (match_details_football.match_details_id_fk).

Получение записей:

$test = Match::with('details')->with('details.matchData')->where('matches.id', 50)->get();

Это вернет одну коллекцию Match с одним отношением MatchDetailsPivot и одним отношением MatchDetailsFootball.

Мне нужно, чтобы вернуть все отношения MatchDetailsFootball.

Как этого можно достичь в Laravel?

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