2017-01-28 3 views
1

У меня есть структуру таблицы следующим образом:Laravel - Загружайте только пять игр на пользователя

пользователей

  • идентификатор
  • имя
  • электронной
  • пароль

игры

  • ID
  • Название

И сводная таблица:

game_user

  • ID
  • оценка
  • game_id
  • user_ ID

Теперь модель пользователя определяется следующим образом:

class User extends Authenticatable 
{ 
    use Notifiable; 

    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    protected $hidden = [ 
     'password', 
    ]; 

    public function games() { 
     return $this->belongsToMany(Game::class); 
    } 
} 

Теперь, что я заинтересован в этом, это написать один Красноречивый выражение, которое получит мне множество пользователей, каждый из которых с не более пяти игр. Выполнение чего-то вроде User::with('games')->get(), конечно, выбирает все игры для каждого пользователя.

Как это можно сделать?

ответ

0

Используйте take() метод:

User::with(['games'=>function($query){ 
      if($query->count()>5) 
      { 
       $query->take(5); 
      } 
      else 
      { 
       $query->get(); 
      } 
    }])->get(); 

Там нет простого способа добиться этого. См. Tweaking Eloquent Relations.

+0

У меня есть шесть игр для пользователя1 и два для user2 в моей БД. Ваше решение загружает пять для user1, а для user2 - нет. Вы хотите, чтобы я делил данные БД и конечный результат? – dotslash

+0

@ dotslash вы можете подсчитать количество игр. Если больше 5, возьмите 5, возьмите все. обновил ответ. –

+0

Все те же! :(Смотрите код и вывод: http://pastebin.com/YRW6kKTz – dotslash

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