2012-10-11 106 views
0

我有一个mail_conversation和一个mail_conversation_member表。Yii has_many与两个主键的关系

mail_conversation只有id作为PRIMARY KEY

mail_conversation_member具有conversation_iduser_id作为PRIMARY KEY s。

现在,我想列出一个会话及其所有成员,但它只返回一个成员。看起来我需要在HAS_MANY关系中添加第二个PRIMARY KEY

'message_member' => array(self::HAS_MANY, 'MailConversationMember', 'conversation_id') 

我得到的谈话:

$criteria = new CDbCriteria(); 
     $criteria->condition = "message_member.user_id = " . Yii::app()->user->id; 
     $criteria->order = 'messages.date_created DESC'; 

     $mail_conversations = MailConversation::model()->with(array('message_member', 'messages'))->findAll($criteria); 

回答

0

这是因为你的标准。如果您从with阵列中取出'message_member',则可以在您进行对话后延迟加载成员。您应该检查Yii生成的SQL代码,以确认该条件正在按照预期进行解释。

另外,为什么不定义的成员类的关系:

'conversations' => array(self::HAS_MANY, 'MailConversationMember', 'user_id',array(
    'order' => 'messages.date_created DESC', 
), 

然后你就可以通过,而不用您指定的标准拉交谈,并通过拉会员的每个对话。