Laravel Query builder во многих отношениях - PullRequest
0 голосов
/ 21 ноября 2018

Давайте рассмотрим, что у меня есть модель с именем Sportman и еще одна Sport, которые связаны через таблицу pivot: отношение многие ко многим .

Пример кодаза их миграции.

# Sportmans migration
Schema::create('sportsmans', function (Blueprint $table) {
    $table->increments('id');
    $table->string('firstname');
    $table->string('lastname');
});

# Sports migration
Schema::create('sports', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('description');
});

Вот их отношения в моделях:

# Defining association in Sportsman model
public function sports(){
    return $this->belongsToMany( Sport::class, 'sportsman_has_sports', 'person_id', 'sport_id' );
}

# Defining association in Sports model
public function sportsman(){
    return $this->belongsToMany( Sportsman::class );
}

Как я могу использовать Laravel с Eloquent, чтобы получить sportsman, который играет:

  1. Только "Футбол"
  2. Коробка или "Плавание"
  3. Обе "Теннис и Баскетбол

Вот что я пытался сделать для вопроса 2:

Sportsman::with(['sports:person_id,id,name'->whereHas('sports', function ($query) {
    $query->whereIn('name', ['Box', 'Swimming'] );
});

Самым сложным является вопрос 3

1 Ответ

0 голосов
/ 21 ноября 2018

Вы помещаете подзапрос в функцию whereHas ...

Sportsman::whereHas('sports', function ($query) {
    $query->whereIn('name', ['Box', 'Swimming'] );
})
->with('sports')
->get();
// Below is your last question
Sportsman::where(function ($query) {
    $query->whereHas('sports', function ($subquery) {
        $subquery->where('name', 'Tennis');
    });
    $query->whereHas('sports', function ($subquery) {
        $subquery->where('name', 'Basket-ball');
    });
})
->with('sports')
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...