也许一个例子最能描述我的问题:
架构:
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,而不是连接的描述。我错过了什么?
答案 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();