1

こんにちは、2 つのテーブルがあり、それらの間の関係を作成しようとしています。

OH_USERS (テーブル)

user_id (キー)

エージェント

agent_id user_id (キー)

エージェントの電子メールを OH_USERS テーブルから取得する必要がありますが、user_id をキーとして使用する代わりに、agent_id をキーとして使用して 2 つのテーブルを関連付けます。そのため、正しい結果が得られません。どのフィールドをキーとして使用するか、データベースに保持されているものを選択するかを具体的に定義できる場所はありますか?

4

3 に答える 3

4

フレームワークには、これに対する解決策が既に用意されています。最新のリリースでは、リレーションに使用するキーを手動で指定できます。ドキュメントで説明されているように

カスタム PK->FK 関連付けを指定する必要がある場合は、それを array('fk'=>'pk') として定義できます。

あなたの場合、次のようになります。

'user'=>array(self::BELONGS_TO, 'OH_USERS ', array('user_id'=>'user_id')), 

この方法で関係を確立しない場合、フレームワークは外部テーブルの主キーを探し、それを使用して結合を行います。

于 2012-05-28T14:09:47.317 に答える
0

あなたの質問をもう一度読んだ後:

「OH_USERS」からレコードを取得しているため、エージェントとの関係を定義する必要があります。

'agent'=>array(self::BELONGS_TO, 'AgentModel', '' , 'on' => 't.user_id = agent.user_id'), 

このようにして、デフォルトのagent_idではなくuser_idに基づいてエージェントモデルとの関係を作成するようにユーザーモデルに指示しています

于 2012-05-28T13:08:46.610 に答える
0

エージェント モデルに移動し、これに関連して定義します...

    '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];

それはうまくいくでしょう..

于 2012-05-25T05:03:37.797 に答える