Laravel-запрос с использованием существующей модели - PullRequest
0 голосов
/ 11 октября 2018

У меня есть две модели: предложения и специальности со многими ко многим:

в Offer.php

public function specialities()
{
    return $this->belongsToMany('App\Speciality');
}

в Speciality.php

public function offers()
{
    return $this->belongsToMany(Offer::class);
}

пока это просто.

Теперь я строю запрос, чтобы получать только предложения с определенной специальностью.Проблема в том, что я использую вспомогательную функцию when, поэтому я не знаю, как получить доступ к специальной модели:

public function template($person = "", $speciality = "")
{
      $offers = Offer::when($speciality, function($query, $speciality) {
        return $query->specialities()->where('speciality_name', $speciality)->get();
      })->orderBy('created_at','desc')->paginate(9);
}

И это не работает для меня.Кто-нибудь может дать мне совет, как мне написать это?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Использование whereHas():

$offers = Offer::when($speciality, function($query, $speciality) {
    $query->whereHas('specialities', function($query) use($speciality) {
        $query->where('speciality_name', $speciality);
    });
})->orderBy('created_at', 'desc')->paginate(9);
0 голосов
/ 11 октября 2018

Для запроса вы должны использовать join вместо specialities(), так что это будет выглядеть примерно так:

 $offers = Offer:join('offer_specialities os', 'offer.id', 'os.offer_id')
 ->join('specialities', 'specialities.id', 'os.speciality_id')
 ->when($speciality, function($query, $speciality) {
    return $query->where('specialities.speciality_name', $speciality)->get();
  })->orderBy('created_at','desc')->paginate(9);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...