Если текущий пользователь подал заявку на 10 заданий, вы в настоящее время делаете 10 + 1 запросов (один, чтобы получить все приложения, а затем один на задание). Вы можете улучшить это двумя способами:
Вместо выполнения 10 запросов в цикле вы можете сначала собрать все значения jid
в массиве, а затем выполнить запрос IN
, чтобы выполнить 1 + 1 запрос.
$this->jobapplieds = $this->getUser()->getUser()->getJobApplieds();
$jobapplieds_by_jid = array();
foreach ($jobapplieds as $ja)
{
// If you can apply multiple times for the same job, this should be a second-level array
$jobapplieds_by_jid[$ja->getJid()] = $ja;
}
$c = new Criteria();
$c->add(JobPeer::JID, array_keys($jobapplieds_by_jid), Criteria::IN);
$jobs = JobPeer::doSelect($c);
foreach ($jobs as $job)
{
echo $job->getTitle();
echo $job->getDescription();
echo $jobapplieds_by_jid[$job->getJid()]->getAppliedAt();
}
Другой вариант - выполнить один запрос, когда вы начнете с таблицы job
, объедините ее с таблицей job_applied
и установите для uid
таблицы job_applied
свой текущий идентификатор пользователя. Это должно выполнить только один запрос.
$c = new Criteria();
$c->add(JobAppliedPeer::UID, $this->getUser()->getUser()->getUid());
$jobs = JobPeer::doSelectJoinJobApplied($c);
foreach ($jobs as $job)
{
echo $job->getTitle();
echo $job->getDescription();
echo $job->getJobApplied()->getAppliedAt();
}