2015-01-12 4 views
1

У меня есть следующие таблицы:Laravel соединения двух моделей в модели пользователя

Пользователи Игры Персонажи

пользователь будет иметь одну активную игру в то время, и из этой игры, будет иметь один активный характер ,

Я хочу, чтобы выполнить следующие дзёи на моем столе аутентификации:

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 столе как только загрузку страницы, так что я использовал мою модель пользователя, чтобы сделать следующее:

class User extends Eloquent implements UserInterface, RemindableInterface { 

    public function game() { 
     return $this->hasOne('game', 'ID', 'active_gameid'); 
    } 

} 

class game extends Eloquent { 

    protected $table = "games"; 

    public function character() { 
     return $this->hasOne('character', 'ID', 'active_charid'); 
    } 

} 

class character extends Eloquent { 

    protected $table = "characters"; 

} 

выше не работает вывод следующий раз возвращает значение NULL:

var_dump(Auth::user()->game->character);

Я пытался сделать очевидные проверки, такие как убедившись, что данные в таблице, и такие, и что все, кажется, хорошо.

Помогает ли кто-нибудь в том, где я ошибаюсь?

Спасибо!

+0

Пробовали ли вы var_dumping 'Auth :: пользователь()' и 'Auth :: user() -> game' самостоятельно? – Dencker

ответ

1

Ваши отношения неправильны:

// 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 = ? 
+1

Похоже, что 'User' содержит идентификатор' game' (users.active_gameid), а 'game' содержит идентификатор' character' (games.active_charid), поэтому не должно быть, что пользователь принадлежит к игра и игра принадлежит персонажу? – patricus

+0

@patricus Конечно! Я не все внимательно прочитал. –

+0

Спасибо за ответ! К сожалению, это не работает. Моя игра Модель: 'класс Game extends Eloquent { \t защищенный $ table =" games "; \t общественный символ функции() { \t \t return $ this-> принадлежитTo ('characters', 'active_charid', 'ID'); \t} } символов класса расширяет Eloquent { } '' – Patchesoft

Смежные вопросы