Я хотел бы получить все данные (результаты строки) из Полиморфного отношения внутри одной Коллекции элементов
Вот сценарий:
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?