2016-05-21 5 views
0

У меня есть следующий метод Laravel:Laravel: возвращает конкретные данные Relation

public function getTeam() 
    { 
     $userCharacters = UserCharacters::with('evolution') 
     ->where('user_id','=',$this->id); 

     return $userCharacters->get(); 
    } 

Как вы можете видеть:

  • каждый пользователь имеет символы, описанные в UserCharacters модели.
  • каждый символ имеет эволюцию (я тоже связал его с самим символом пользователя).

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

В настоящее время он возвращает всю эволюцию, учитывая уровень.

Я пытался добавить это where условие в отношении evolution() в UserCharacters модели, но он не работает с Laravel With:

public function evolution() 
{ 
    return $this->hasMany(Evolution::class,"character_id")->where('level','<',$this->level); 
} 

Надежда кто-то может помочь мне с этим, спасибо !

+0

Возможно '$ this-> level' еще не установлен, когда вы звоните' UserCharacters :: с ('эволюция') '. Что делает 'dd (UserCharacters :: с ('evolution') -> toSql());' return? –

+0

Возвращает '' select * from user_characters "' – TheUnreal

+0

Я немного смущен. Попробуйте это: 'где ('level', '<', 'user_characters.level')' –

ответ

0

Попробуйте построитель запросов. Как «$ this-> идентификатор» должен вернуть идентификатор пользователя, вы должны назвать это от модели пользователя):

public function getTeam() 
{ 
    return DB::table('user_characters') 
    ->join('evolutions','user_characters.id','=','evolutions.user_characters_id') 
    ->where('user_characters.user_id','=',$this->id) 
    ->where('evolutions.level','<','user_characters.level') 
    ->select('user_characters.*') 
    ->get(); 
} 
Смежные вопросы