Как ускорить обработку запроса к бд?
Что касается производительности, то вы столкнулись с проблемой N+1 запроса.
Это когда вам надо получить список записей и для каждой из них вы делаете дополнительный запрос к БД. 900 записей? Ок, будет первый запрос + ещё 900, по одному на каждую запись.
Быстрее может быть выполнить всего два запроса. Первый берёт записи, а второй берёт все дополнительные данные сразу для всех записей и потом уже на стороне php вы в цикле засовываете данные в каждую запись.
Вот абстрактный пример:$shops = query("Select * from shop where city='Moscow'");
$shops = indexBy("id",$shops);
$employes = query("Select * from employe join shop on(shop.id = employe.id_shop) where shop.city='Moscow'");
foreach($employes as $eml){
    $shops[$emp["id_shop"]]["employes"][] = $emp;
}
Самое элегантное решение, которое смог из себя выдавить
Буду рад правкам.$linkeds = [];
        $lookups = (new Lookup)
            ->query()
            ->select([
                'lookup_id',
                'record_id',
                'lookup_list_id',
                'linked_record_id',
                'data',
                'element_label',
                'field_name',
                'sequence_order',
                'field_no',
                'archive'
            ])
            ->where('company_id', UserData::getDataUser()->company_id)
            ->where('lookup_list_id', $lookup_list_id)
            ->orderBy('sequence_order')
            ->get()
            ->groupBy(function($item, $key) use (&$linkeds) {
                if($item->linked_record_id > 0)
                {
                    $linkeds[$item->record_id] = $item->linked_record_id;
                }
                return $item->record_id;
            });
        $records = [];
        foreach ($lookups as $record_id => $node)
        {
            $records[$record_id]['data'] = $node;
            if(isset($linkeds[$record_id]))
            {
                $link = (new Lookup)
                    ->query()
                    ->select([
                        'lookup_id',
                        'record_id',
                        'lookup_list_id',
                        'linked_record_id',
                        'data',
                        'element_label',
                        'field_name',
                        'sequence_order',
                        'field_no',
                        'archive'
                    ])
                    ->where('company_id', UserData::getDataUser()->company_id)
                    ->where('record_id', $linkeds[$record_id])
                    ->orderBy('sequence_order')
                    ->get()->toArray();
                $records[$record_id]['link_data'] = $link;
            }
        }