Настройка игрового сайта.У меня есть 3 таблицы.Пользователь, rank (думаю, что военный), и таблица rank_history.
Rank:
id, name, abbr, level, nextlevel, mintime
RankHistory:
id, user_id, rank_id, promoter, reason, created_at
public function User()
{
return $this->belongsToMany(User::class);
}
public function PromotedBy()
{
return $this->belongsToMany(User::class, 'rank_history', 'id', 'promoter');
}
public function Rank()
{
return $this->belongstoMany(Rank::class);
}
user:
id, name, yadda (standard user stuff; nothing relevant)
public function RankHistory()
{
return $this->hasMany(RankHistory::class);
}
Я использую историю рейтингов как способ устанавливать поощрения, понижения в должности и иметь историю.в конечном итоге я бы хотел иметь возможность набирать $user->rank_detail($detail)
и возвращать либо аббревиатуру, имя, уровень, что угодно.
user.php
protected $with = ['rankhistory'];
public function rank_detail($detail)
{
$rankId = $this->RankHistory->pluck('rank_id')->last();
if (!$rankId) { $rankId = 1;}
return Rank::where('id', $rankId)->value($detail);
}
это работает, но он выполняет отдельный запрос запроса, чтобы попасть в таблицу рангов, чтобы получить подробности.Так как это довольно безопасно, мне понадобится информация о рейтинге, когда я получу пользователя, для меня достаточно смысла загружать их.Вопрос в том, как?Я пробовал hasmanythrough
, hasmany
, даже пытался добавить $with =[ rankhistory.rank']
ничего не работает.Я также знаю, что это можно решить, добавив столбец рейтинга в пользовательскую таблицу, но там, где это возможно, пользователь будет часто менять рейтинг, я хотел, чтобы пользовательская таблица была как можно более чистой.Кроме того, наличие таблицы истории дает пользователю запись.
Итак, вопрос заключается в следующем: что мне нужно надеть пользователю (и / или другим файлам), чтобы быстро загрузить информацию о ранге с пользователем?
Также следует отметить, что промоутером в таблице ранхистории является FK для идентификатора в таблице пользователей.Как бы мне получить эти отношения?прямо сейчас я могу вернуть $ history-> promoter, и он даст мне идентификатор. Как я могу получить информацию о пользователе без лишних запросов?