public function indexAction() { if (!$this->getRequest()->isPost()) { return $this->page404(); } $data = $this->getRequest()->getPost(); $form = new Search($this->getServiceLocator()); $form->setData($data); if ($form->isValid()) { $formSearchDetail = new SearchDetail($this->getServiceLocator()); $dataSearch = $data['search']; $dataSearchs = preg_split('/[\\s,.-]+/', $dataSearch); /** @var \Subject\Model\SubjectMapper $subjectMapper */ $subjectMapper = $this->getServiceLocator()->get('Subject/Model/SubjectMapper'); $subjects = $subjectMapper->fetchSearch($dataSearchs); $subjectIds = []; foreach ($subjects as $subject) { $subjectIds[] = $subject->getId(); } $expertsub = new Subject(); $expertsub->addOption('subjectIds', $subjectIds); /** @var \Expert\Model\Expert\SubjectMapper $expertSubjectMapper */ $expertSubjectMapper = $this->getServiceLocator()->get('Expert/Model/Expert/SubjectMapper'); $mentors = $expertSubjectMapper->search($expertsub); $this->getViewModel()->setVariables(['expert' => $mentors]); $this->getViewModel()->setVariables(['searchContent' => $dataSearch]); $this->getViewModel()->setVariables(['subjects' => $subjects]); $this->getViewModel()->setVariables(['form' => $formSearchDetail]); return $this->getViewModel(); } }
/** * @author DuongNQ * @param \Expert\Model\Expert\Subject $expertsub */ public function search($expertsub, $options) { $select = $this->getDbSql()->select(array('es' => self::TABLE_NAME)); if ($expertsub->getSubjectId()) { $select->where(['es.subjectId' => $expertsub->getSubjectId()]); } if ($expertsub->getOption('subjectIds')) { $select->where(['es.subjectId' => $expertsub->getOption('subjectIds')]); } $select->order(['es.id' => 'DESC']); $select->group('es.expertId'); // vdump($this->getDbSql()->buildSqlString($select));die; $paginator = $this->preparePaginator($select, $options, new Subject()); $userIds = array(); $users = array(); /** @var \Expert\Model\Expert\Subject $es */ foreach ($paginator as $es) { $userIds[] = $es->getExpertId(); } $subjects = $this->fetchAllSubject($expertsub->addOption('expertIds', $userIds)); if ($userIds) { $select = $this->getDbSql()->select(['u' => UserMapper::TABLE_NAME]); $select->where(['u.id' => $userIds]); $query = $this->getDbSql()->buildSqlString($select); $result = $this->getDbAdapter()->query($query, Adapter::QUERY_MODE_EXECUTE); if (count($result)) { $resultArray = $result->toArray(); foreach ($resultArray as $u) { $user = new User(); $users[$u['id']] = $user->exchangeArray($u); } } } /** @var \Expert\Model\Expert\Subject $expertsub */ foreach ($paginator->getCurrentModels() as $expertsub) { $userId = $expertsub->getExpertId(); $expertsub->addOption('subject', isset($subjects[$userId]) ? $subjects[$userId] : null); $expertsub->addOption('user', isset($users[$userId]) ? $users[$userId] : null); } return $paginator; }