Похоже, что вы пытаетесь получить двойной долг из ->whereHas()
, который, я считаю, является лишь ограничением, чтобы ограничить ваш flows
теми, у кого documents
. Попробуйте начать с вызова ->where()
, который инкапсулирует всю вашу логику сопоставления, и используйте простой ->whereHas('documents')
и посмотрите, как это работает.
Так что-то вроде этого:
$documentsTypesByRequester = DocumentType::groupBy('requester_id')
->get();
$protocols = Protocol::whereHas('flows', function ($flows) use ($documentsTypesByRequester) {
return $flows->where('sequence', 1)
->where('documents', function ($query) use ($documentsTypesByRequester) {
// Put all of your logic for choosing a document here
// ...
})
->whereHas('documents');
});