【问题标题】:Symfony Propel model layerSymfony Propel 模型层
【发布时间】:2011-04-17 06:35:02
【问题描述】:

我有三个表,例如 user、job 和 job_applied。 user 表有 uid , job 表有 jid 并且 job_applied 有 uid 和 jid 。我需要根据job_applied表的uid和jid获取job表的职称、描述、位置。 我能够从下面的代码中获取值,但我认为这是错误的方式(粗鲁的方式)。

$this->jobapplieds = $this->getUser()->getUser()->getJobApplieds();

foreach($jobapplieds as $ja)   
{    
    $c = new Criteria();

    $c->clearSelectColumns();

    $c->addSelectColumn(JobPeer::TITLE);

    $c->addSelectColumn(JobPeer::DESCRIPTION);

    $c->addSelectColumn(JobPeer::STATUS);

    $c->add(JobPeer::JID,$ja->getJid());

    $rs = JobPeer::doSelectRS($c); 

    while($rs->next())
    {
        echo $rs->getString(1); 
        print $rs->getString(2);
    }

    echo $ja->getAppliedAt();

}

【问题讨论】:

  • 您使用的是哪个版本的 Symfony 和 Propel?
  • symfony 1.16 版本正在使用...推进我不知道,它是哪个版本...
  • Symfony 1.16 不存在,你的意思是 1.0.16 吗?

标签: php symfony1 model propel


【解决方案1】:

如果当前用户申请了 10 个工作,您当前执行 10 + 1 次查询(一个获取所有申请,然后每个工作一个)。您可以通过两种方式改进:

您可以先将所有 jid 值收集到一个数组中,然后再进行 IN 查询,而不是在循环中进行 10 次查询,因此您可以进行 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 表连接,并将job_applied 表的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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多