如何查询和返回存储的id而不是连接的描述

时间:2012-07-12 14:01:26

标签: symfony1 symfony-1.4

也许一个例子最能描述我的问题:

架构:

Referral:
  actAs:                            { timestampable: ~ }
  columns:
    id:                             { type: integer, primary: true, notnull: true, autoincrement: true, unique: true }  
    other_stuff:                    { type: string }  
    reasonCode:                     { type: integer }    
  relations:   
    ReasonCode:                     { local: reasonCode, foreign: id, foreignAlias: ReasonCodes }  

ReasonCode:
  columns:
    id:                             { type: integer, primary: true, notnull: true, autoincrement: true, unique: true }
    description:                    { type: string }

查询(referralTable.class.php):

    public function getObjectByReferralId($id){
        $q = Doctrine_Query::create()
            ->select('*')
            ->from('referral_submissions')
            ->where('referral_id=?', $id)
            ->fetchOne();
        return $q;   
    }

在模板中调用:

<?php 
$id = <source of id>;
echo Doctrine_Core::getTable('referral')->getObjectByReferralId($id)->getReasonCode();
 ?>

模板中的上述调用获取reasoncode返回存储在ReasonCode表中的“description”,而不是Referral表中存储的id。我需要实际的id,而不是连接的描述。我错过了什么?

1 个答案:

答案 0 :(得分:0)

令人困惑,因为您使用关系名称命名了您的外键。因此,当您认为自己获得密钥时,就可以获取关系。我想Doctrine不会检索主键,因为ReasonCode表中只有一个字段,因此返回description字段。

尝试:

Doctrine_Core::getTable('referral')
  ->getObjectByReferralId($id)
  ->get('reasonCode');

顺便说一下,您还可以使用以下关系检索id:

Doctrine_Core::getTable('referral')
  ->getObjectByReferralId($id)
  ->getReasonCode()
  ->getId();

我认为你应该定义你的外键,如:reason_code_id而不是reason_code。然后您的架构将变为:

Referral:
  actAs:                            { timestampable: ~ }
  columns:
    id:                             { type: integer, primary: true, notnull: true, autoincrement: true, unique: true }  
    other_stuff:                    { type: string }  
    reasonCode_id:                  { type: integer }    
  relations:   
    ReasonCode:                     { local: reasonCode_id, foreign: id, foreignAlias: ReasonCodes } 

您将能够使用以下方式检索ID:

Doctrine_Core::getTable('referral')
  ->getObjectByReferralId($id)
  ->getReasonCodeId();