Где пункт запроса с использованием Laravel Eloquent

У меня этот код работает правильно $sector = Sector::where('ref_id', $sectorId)->with('offers.provider')->first(); который был изменен на код ниже для большей гибкости и лучшего понимания того, что я хочу сделать:

$sector = Sector::where('ref_id', '$sectorId')
->with(
[
'offers' => function($query) {
$query->with(
[
'provider' => function($query) {
$query->select('name');
}
]
);
}
]
)
->first();

Итак, здесь мы берем sector, offers ссылка на это sector и под каждым offerмы берем связанный provider, Сейчас, providers имеют status который либо 0 или же 1, Итак, основываясь на моем коде выше, есть ли способ получить ТОЛЬКО offers которые имеют providers со статусом 1 ?

Пожалуйста, помогите мне решить эту проблему.

0

Решение

Ты можешь использовать whereHas — который специально предназначен для работы в подобных сценариях. Пример из документации:

Если вам требуется еще больше возможностей, вы можете использовать методы whereHas и orWhereHas для установки условий «где» в ваших запросах has. Эти методы позволяют добавлять настраиваемые ограничения в ограничение отношений, например, проверять содержимое комментария:

// Retrieve all posts with at least one comment containing words like foo%
$posts = Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();

Не позволяйте фрагменту обмануть вас, он будет отлично работать внутри closure как у вас выше.

0

Другие решения

Вы пытались добавить предложение where в запросе провайдера, чтобы выбрать только провайдеров со статусом 1?

'provider' => function($query) {
$query->select('name')->where('status', 1);
}

РЕДАКТИРОВАТЬ: Я не эксперт в Laravel, но, возможно, пример запроса, с которым у меня возникли проблемы, может пролить свет на вашу проблему:

$dealer = $this->dealer->where('foreign_dealer_id', $dealerIdInFeed)
->where(function ($subQuery) use ($accountTypes) {
if(count($accountTypes) > 1)
{
foreach($accountTypes as $accountType)
{
$subQuery->orWhere('account_type', $accountType);
}
}
else
{
$subQuery->orWhere('account_type', $accountTypes);
}
})
->first();
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector