Laravel Querying Отношения Существование - PullRequest
0 голосов
/ 10 июня 2018

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

public function getTeams(){      
  $teams = Team::whereHas('submissions', function($q){
    $q->limit(1);
  })->with(['submissions'])->get();

  return response()->json(['data'=>$teams]);
}

Модель команды:

   public function submissions(){
        return $this->hasMany('App\submission', 'team_id', 'id');
    }

Модель отправки:

public function team(){
    return $this->belongsTo('App\Team', 'id', 'team_id');
}

Сейчас я пытаюсьчтобы получить только одно представление в методе getTeams .Но функция ограничения работает неправильно.Он не возвращает никаких ошибок.Он возвращает все заявки для каждой команды.Я хочу только 1 представление.Как мне заставить это работать?

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Нет простого способа ограничить энергичную загрузку.

Вы можете использовать отношение HasOne:

public function submission() {
    return $this->hasOne('App\submission', 'team_id', 'id');
}

$teams = Team::has('submission')->with('submission')->get();

Это все равно будет извлекать все заявки в фоновом режиме, но только показыватьпо одному для каждого $team.

Кстати: вы можете улучшить запрос, удалив has('submission') и отфильтровав команды после этого.

$teams = Team::with('submission')->get();
$teams = $teams->where('submission', '!==', null)
0 голосов
/ 10 июня 2018
 $teams = Team::whereHas('submissions')
    ->with([
        'submissions' => function($query) {
            $query->limit(1);
        }
    ])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...