2015-02-06 5 views
0

У меня возникла очень странная проблема с использованием Laravel.Странная ситуация NULL в моделях Laravel Eloquent

У меня есть 4 таблицы (есть больше, но они не имеют ничего общего с этой проблемой):

platoons 
- id 
- game_id 
- leader_id 
- name 

games 
- id 
- name 
- icon 

game_user_info_fields 
- id 
- game_id 
- user_info_id 

user_info_fields 
- id 
- name 

Модель этих таблиц содержат следующие методы соотношения:

class Platoon extends \Eloquent { 
    public function game() { 
     return $this->belongsTo('Game'); 
    } 
} 

class Game extends \Eloquent { 
    protected $fillable = []; 
    protected $table = 'games'; 

    public function fields() { 
     return $this->hasMany('GameUserInfoField'); 
    } 
} 

class GameUserInfoField extends \Eloquent { 
    protected $fillable = []; 
    protected $table = 'game_user_info_fields'; 

    public function field() { 
    return $this->belongsTo('UserInfoField'); 
    } 

    public function game() { 
    return $this->belongsTo('Game'); 
    } 
} 

class UserInfoField extends \Eloquent { 
    protected $fillable = []; 
    protected $table = 'user_info_fields'; 

    public function fields() { 
    return $this->hasOne('GameUserInfoField'); 
    } 
} 

Таблица данных:

platoons 
id game_id leader_id name 
1 1  1   Battlefield 4 
2 2  1   CS:GO 
3 3  1   LoL 
4 4  1   GTAV 

games 
id name    icon 
1 Battlefield 4  bf4.png 
2 CS:GO    csgo.png 
3 League of Legends lol.png 
4 GTA V    gtav.png 

game_user_info_fields 
id game_id user_info_field_id 
1 1  1 
2 1  2 
3 2  3 
4 3  4 
5 4  5 

user_info_fields 
id name 
1 Origin username 
2 Battlelog link 
3 Steam ID 
4 LoL username 
5 Social club username 

Проблема:

(The ГВУ :: С.() метод является вспомогательным, аналогично функции дд())

$platoon = Platoon::where('id', '=', Input::get('platoon_id'))->first(); 

foreach ($platoon->game->fields as $gameuserinfofield) { 
    HLP::pp($gameuserinfofield->field); 
} 

Возвращает NULL,, когда его следует вернуть модель UserInfoField, а

foreach ($platoon->game->fields as $gameuserinfofield) { 
    HLP::pp($gameuserinfofield->game); 
} 

возвращает модель игры, как и следовало ожидать.

Они оба имеют один и тот же вид отношений, просто разные таблицы, так что я не понимаю, как это не удалось получить модель ...

Получение модели прямо через

UserInfoField::all(); 

извлекает модель, как и должно.

Я застрял на этом в течение последних 4 часов и не мог исправить это, пожалуйста, помогите!

+0

Попробуйте передать имя столбца внешнего ключа следующим образом: 'return $ this-> attribTo ('Game', 'user_info_field_id');' – lukasgeiter

+0

попробовал это раньше, и просто сделал это снова, и это не помогает – H1tm4n

+0

Возьмите посмотрите на возвращаемое значение '$ gameuserinfofield-> field() -> toSql()' – lukasgeiter

ответ

1

Сложные вещи с вашими отношениями. Вы можете просто указать их как то, что есть. От многих до многих. Это делается с помощью belongsToMany():

public function fields(){ 
    return $this->belongsToMany('UserInfoField'); 
} 

Это новое отношение делает GameUserInfoField модель полностью устарели.

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