Left Join with Yii CDbCriteria


Left Join with Yii CDbCriteria

我有一个查询如下:

SELECT messages.id, 
       messages.sender_id, 
       messages.subject, 
       messages.body, 
       messages.created_at, 
       user.username AS username  
FROM messages  LEFT JOIN user ON user.iduser=messages.sender_id

我尝试将查询更改为CDbWriter模型,如下所示:

$criteria   = new CDbCriteria();
$criteria->select = "messages.id, messages.sender_id, messages.subject, messages.body, messages.created_at, user.username AS username";
$criteria->alias  = "messages";
$criteria->join   = "LEFT JOIN user ON user.iduser=messages.sender_id";
$messagesAdapter = Message::model()->findAll($criteria);

但是,当我执行查询时,出现如下错误:

未定义属性"Message.username"。

查询中的错误是什么?请帮忙。

您应该使用relation name打印用户名用户属性,即user.*.

为此,您应该在消息模型中为用户模型建立关系。类似。。

public function relations()
{
    return array(            
        ......
        ......
        'userRel' => array(self::HAS_MANY, 'User', 'isuser'),
        ......
    );
}

现在,您可以使用此关系名称userRel 打印用户名

//check this
print_r($messagesAdapter[0]->userRel);
//May be you can get username with below statement as you are using left join
echo $messagesAdapter[0]->userRel[0]->username;