Php Symfony推进模型层

Php Symfony推进模型层,php,symfony1,model,propel,Php,Symfony1,Model,Propel,我有三个表,如用户、作业和应用的作业。用户表有uid,作业表有jid,应用的作业有uid和jid。我需要得到职位名称,描述,职位表根据uid和jid的工作申请表。 我可以从下面的代码中获取值,但我认为这是错误的方法(粗糙的方法) 如果当前用户已申请了10个作业,则您当前将执行10+1查询(一个查询用于获取所有应用程序,然后每个作业一个查询)。您可以通过两种方式对此进行改进: 您可以先收集数组中的所有jid值,然后在查询中执行,这样您就可以执行1+1查询,而不是在循环中执行10个查询 $this-

我有三个表,如用户、作业和应用的作业。用户表有uid,作业表有jid,应用的作业有uid和jid。我需要得到职位名称,描述,职位表根据uid和jid的工作申请表。 我可以从下面的代码中获取值,但我认为这是错误的方法(粗糙的方法)


如果当前用户已申请了10个作业,则您当前将执行10+1查询(一个查询用于获取所有应用程序,然后每个作业一个查询)。您可以通过两种方式对此进行改进:

您可以先收集数组中的所有
jid
值,然后在
查询中执行
,这样您就可以执行1+1查询,而不是在循环中执行10个查询

$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\u applicated
表连接,并将
job\u applicated
表的
uid
设置为当前用户ID。这应该只执行一个查询

$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();
}

如果当前用户已申请了10个作业,则您当前将执行10+1查询(一个查询用于获取所有应用程序,然后每个作业一个查询)。您可以通过两种方式对此进行改进:

您可以先收集数组中的所有
jid
值,然后在
查询中执行
,这样您就可以执行1+1查询,而不是在循环中执行10个查询

$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\u applicated
表连接,并将
job\u applicated
表的
uid
设置为当前用户ID。这应该只执行一个查询

$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();
}

你使用的是哪个版本的Symfony和SPORE?Symfony 1.16版本我使用…SPORE我不知道,它是哪个版本…Symfony 1.16不存在,你的意思是1.0.16?你使用的是哪个版本的Symfony和SPORE?Symfony 1.16版本我使用…SPORE我不知道,它是哪个版本…Symfony 1.16不存在,你的意思是1.0.16?