Используйте конвейер агрегации .
Преобразуйте объекты, встроенные в sales_types, в массив
$convertSellingTypesToArray = [
'$project' => [
'finance.selling_types' => [
'$objectToArray' => '$finance.selling_types'
]
]
];
Затем разверните массив в отдельные документы
$sellingTypesAsDocuments = [
'$unwind' => '$finance.selling_types'
];
Фильтр со статусом 1.
$selectOnlyActiveStatus = [
'$match' => [
'finance.selling_types.v.status' => [
'$eq' => 1
]
]
];
Конвертировать sales_types обратно в объект.
$convertSellingTypesToObject = [
'$project' => [
'finance.selling_types' => [
'$arrayToObject' => [
[
'$finance.selling_types'
],
]
]
]
];
finances::raw()->aggregate([
$convertSellingTypesToArray,
$sellingTypesAsDocuments,
$selectOnlyActiveStatus,
$convertSellingTypesToObject,
])
Обратите внимание, что вам потребуется поддержка разбивки на страницы по запросу