Красноречивое «где» в отношениях возвращает неправильные модели

#php #laravel #eloquent

Вопрос:

У меня есть этот метод на моей модели «Работодатель».:

 
    public function job_offers() {
        return $this->hasMany('AppJobOffer');
    }

    public function shared_job_offers() {
        return $this->job_offers()->where(function ($query) {
            $query->where('subscription', 3)->where('disable_share', false);
        })->orWhere(function ($query) {
            $query->where('subscription', '!=', 3)->where('manual_share', true);
        });
    }
 

Я думал, что это сработает нормально, но в итоге мне дают модели, которые даже не связаны с моей моделью. Например, идентификатор модели равен 37, и он дает мне отношения всех моделей (например, идентификатор 6).

Есть какие-нибудь идеи о том, почему это могло произойти?

Ответ №1:

Я думаю, что вы испытываете неожиданное поведение из-за того, что не группируете » где » и » Где » в одном вызове. Работает ли это?

 public function shared_job_offers() {
    return $this->job_offers()->where(function ($query) {
        $query->where([
            ['subscription', '=', 3],
            ['disable_share', '=', false]
        ])->orWhere([
            ['subscription', '!=', 3],
            ['manual_share', '=', true]
        ]);
    });
}