Php Zend Framwork select()提供了意外的SQL
对于我的应用程序,我在消息模型中有一个方法,它返回当前用户($id)发送的所有消息。它使用3个联接从3个表返回信息。由于发送者和接收者都来自同一个“users”表,因此我必须在这些列中使用别名a 我的消息模型中的方法:Php Zend Framwork select()提供了意外的SQL,php,mysql,sql,zend-framework,zend-db,Php,Mysql,Sql,Zend Framework,Zend Db,对于我的应用程序,我在消息模型中有一个方法,它返回当前用户($id)发送的所有消息。它使用3个联接从3个表返回信息。由于发送者和接收者都来自同一个“users”表,因此我必须在这些列中使用别名a 我的消息模型中的方法: public function getSentMessages($id) { $messageModel = new self(); $select = $messageModel->select() ->from(
public function getSentMessages($id)
{
$messageModel = new self();
$select = $messageModel->select()
->from(array('m' => 'messages'),
array('m.id', 'm.title', 'm.send',
's.id AS s_id', 's.firstname AS s_fn', 's.lastname AS s_ln', 's.email AS s_e',
'r.id AS r_id', 'r.firstname AS r_fn', 'r.lastname AS r_ln', 'r.email AS r_e'))
->join(array('s' => 'users'),
'm.from = s.id')
->join(array('mu' => 'messages_users'),
'm.id = mu.message_id')
->join(array('r' => 'users'),
'r.id = mu.user_id')
->where('m.from = ?', $id);
$select->setIntegrityCheck(false);
$messages = $messageModel->fetchAll($select);
return $messages;
}
奇怪的事情发生了:resultrow是由我要求的所有专栏组成的。。。但不知何故,所有列(包括我没有要求的列)都是在后面添加的。像这样:
id title send s_id s_firstname s_lastname s_email r_id r_firstname r_lastname r_email id username password firstname lastname email role id message_id user_id status id username password firstname lastname email role
我发现Zend框架返回的SQL查询不是我所期望的。。在这里(为了更好的可读性而清理):
在SELECT语句末尾选中这些星号(*)。。这些是怎么到那里的?Zend文档告诉我,只有在没有列的情况下才使用asterix
谢谢你的帮助 联接有三个参数: 在每个Join子句的末尾添加一个空白值
join(array('s' => 'users'),'m.from = s.id','')
谢谢!我认为这些选项(如“*”中的可选项)不是默认值。问题解决者乐意帮忙。如果你认为答案有用,别忘了接受;)我没有添加空白值,而是将相关列从from子句移动到join子句,nice和tidy。
join(array('s' => 'users'),'m.from = s.id','')