你好我有兩個表,並試圖創建它們之間的關係。如何在創建關係時設置主鍵和外鍵
OH_USERS(表)
USER_ID(鍵)
代理
AGENT_ID USER_ID(鍵)
我需要讓代理商從OH_USERS表電子郵件,但insted的使用USER_ID作爲它使用agent_id作爲與兩個表關聯的鍵。由於我沒有得到正確的結果。是否有任何我們可以明確定義哪個字段用作密鑰的地方,或者選擇它保存在數據庫中的哪個字段。
你好我有兩個表,並試圖創建它們之間的關係。如何在創建關係時設置主鍵和外鍵
OH_USERS(表)
USER_ID(鍵)
代理
AGENT_ID USER_ID(鍵)
我需要讓代理商從OH_USERS表電子郵件,但insted的使用USER_ID作爲它使用agent_id作爲與兩個表關聯的鍵。由於我沒有得到正確的結果。是否有任何我們可以明確定義哪個字段用作密鑰的地方,或者選擇它保存在數據庫中的哪個字段。
進入代理模式,並在此關係定義...
'user'=>array(self::BELONGS_TO, 'OH_USERS ', 'user_id'),
//oh_users is your model class name of user and user_id is your foriegn key in agent table..
,現在你在你的控制器這樣使用活動記錄..
$agent = Agent::model()->with('user')->find('user_id=:user_id',array('user_id'=>$userid));
,現在你獲取的電子郵件用戶像這樣...
$agent['user']['email];
它會工作好..
再次閱讀您的問題後:
你是從「OH_USERS」獲取記錄,所以你需要定義與代理商有關係:
'agent'=>array(self::BELONGS_TO, 'AgentModel', '' , 'on' => 't.user_id = agent.user_id'),
這樣,你是在告訴用戶模型進行的關係代理模型基於user_id而不是默認agent_id
該框架已經爲此提供瞭解決方案。在最新版本中,您可以手動指定您要用於關係的關鍵。 As explained in the doc:
如果你需要指定自定義PK-> FK關聯,你可以把它定義爲數組(「FK」 =>「PK」)
在你的情況下,它會看起來像以下內容:
'user'=>array(self::BELONGS_TO, 'OH_USERS ', array('user_id'=>'user_id')),
如果不stablish關係這種方式,框架會查找外部表的主鍵,並用它做加盟。
謝謝。這幫了我。但是,你是不是指'array('user_id'=>'user_id')'? – regularmike
你是對的@regularmike我修復了代碼。謝謝 – sucotronic
@sucotronic,你是冠軍!謝謝你解決了我的問題,我也必須使用非主鍵值作爲相關表的外鍵。 – Vicer
@sucotronic如果這對你有用,你會接受答案嗎? – Arfeen
ooops,我發表評論的錯誤答案,對不起:P – sucotronic
@sucotronic沒問題。無論誰給予,仍然接受你的最佳答案,所以其他參觀者也可以得到好處。 – Arfeen