У меня есть следующие таблицы:
пользователей
Игры
Персонажи
У пользователя будет одна активная игра за раз, и из этой игры будет один активный персонаж.
Я хочу выполнить следующие joi на моей таблице аутентификации:
SELECT * FROM users
LEFT OUTER JOIN games ON games.ID = users.active_gameid
LEFT OUTER JOIN characters ON characters.ID = games.active_charid
Попробуйте игнорировать часть SELECT *.
Я хотел бы выполнить эти объединения в моей таблице Auth, как только страница загрузится, поэтому я использовал свою модель User для следующих действий:
класс User расширяет Eloquent, реализует UserInterface, RemindableInterface { игра с публичными функциями () { return $ this-> hasOne ('game', 'ID', 'active_gameid'); } } классная игра расширяется Eloquent { protected $ table = "games"; символ публичной функции () { return $ this-> hasOne ('character', 'ID', 'active_charid'); } } символ класса расширяет Eloquent { защищенный $ table = "символы"; }
Вышеуказанное не работает, так как вывод следующего просто возвращает значение NULL:
var_dump (Auth :: пользователя () -> игра-символ>);
Я попытался сделать очевидные проверки, например, убедиться, что данные в таблице и тому подобное, и что все выглядит нормально.
У кого-нибудь есть помощь в том, где я иду не так?
Спасибо!
Ваши отношения неверны
// User model
public function game()
{
return $this->belongsTo('Game', 'active_gameid', 'ID');
}
// Game model
public function character()
{
return $this->belongsTo('Character', 'active_charid', 'ID');
}
и, очевидно, это не вызовет ваш запрос, а 2 отдельных запроса:
Auth::user()
->game // SELECT * FROM games WHERE ID = ?
->character; // SELECT * FROM characters WHERE ID = ?
Других решений пока нет …