首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CActiveDataProvider复条件

CActiveDataProvider复条件
EN

Stack Overflow用户
提问于 2011-08-03 23:37:54
回答 1查看 3.7K关注 0票数 1

我有一个具有下列列的表wall_messages

id

from_user_id

主题

消息

日期

message_reply_id

我希望获得一个CActiveDataProvider,其中包含具有_from_user_id_列给定值的所有墙壁消息。到目前一切尚好。

代码语言:javascript
复制
        $outgoingMessages = new CActiveDataProvider ('Messages', array ( 
        'criteria' => array (
            'condition' => 'from_user_id ='.$userId->id,
        ), 
        'pagination' => array ( 
            'PageSize' => 5, 
        ) 
    ));

现在,我需要添加以下条件:对于那些具有匹配的_from_user_id_值和匹配的_message_reply_id_值的墙壁消息,我只想保留其中的一行。哪个?有“最老”约会的那个。我该怎么做?我对sql查询一点也不擅长,所以这对我来说有点困难。谢谢!

我想出了一个临时解决方案,这是优雅的极端反面:

代码语言:javascript
复制
    $sentMessages = array();
    $alreadyIncludedMessages = array();

    foreach ($user->messagesOut as $mess) {
        if (!in_array($mess->message_reply_id, $alreadyIncludedMessages)){
            $sentMessages[] = $mess;
            $alreadyIncludedMessages[]=$mess->message_reply_id;
        } 
    }
    $outgoingMessages = new CActiveDataProvider ('Messages', array ( 
        'pagination' => array ( 
            'PageSize' => 5, 
        ),
        'data'=>$sentMessages
    ));
EN

回答 1

Stack Overflow用户

发布于 2011-08-04 03:02:45

如果您只想返回一个值,则可以使用以下内容:

代码语言:javascript
复制
  'criteria' => array (
    'condition' => 'from_user_id = :userId AND message_reply_id = :messageId',
    'order' => 'date ASC',
    'params' => array(':userId'=>$userId->id, ':messageId'=>$messageId)
  ),
  'pagination' => array ( 
    'PageSize' => 1,
  )

不要显示页码。如果您想为每个用户显示最古老的消息,您可能需要使用子查询或填充数组,然后使用CArrayDataProvider,这对于复杂的查询非常有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6934587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档