Как использовать eloquent для получения значения из двух отношений «Имеет много» - PullRequest
0 голосов
/ 02 мая 2020

У меня проблема с тем, что в профиле может быть много кампаний, а также много мест. Кампании связаны через сводную таблицу, но моя цель - просто вернуть все идентификаторы местоположения.

Профиль:

public function campaigns() {
   return $this->hasMany('App\Models\Campaign', 'profile_id', 'id');
}

Кампания:

  public function locations() {
     return $this->belongsToMany('App\Models\Location')->withPivot('campaign_id', 'location_id');
  }

В настоящее время я решаю эту проблему, выполняя

$campaigns = $profile->campaigns;

[Doing a nested foreach loop and placing each ID into the array]

Как бы получить это с помощью запроса? Я пробовал

 $campaigns = $profile->campaigns()
                        ->with('locations')
                        ->get()
                         ->pluck('location.id');

1 Ответ

0 голосов
/ 02 мая 2020

Итак, ваша цель - получить информацию из этого места, поэтому я бы начал ваш запрос с этого. Вы можете подготовить запрос на основе отношений, используя метод whereHas().

Это предполагает, что для вашего Location определено отношение campaigns, а для вашего Campaign определено отношение profile.

$ids = Location::whereHas('campaigns.profile', function ($query) use ($profile) {
    return $query->where('id', $profile->id);
})->pluck('id');

Подробнее о запросах по связям вы можете прочитать в документации здесь .

...