0

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

架构:

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 表中的“描述”,而不是存储在 Referral 表中的 id。我需要实际的 ID,而不是连接的描述。我错过了什么?

4

1 回答 1

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();
于 2012-07-12T14:04:54.670 回答