duanshan188866 2014-04-02 15:12
浏览 52
已采纳

尝试使用Zend DB Table创建一个'join'语句 - zend framework 2

I have a model that needs to execute a join query on 2 tables... lets call them friend_list and user_profile.

I am having a heck of a time trying to put together the zend style code to produce the proper query I need to accomplish this... below is the desired query:

SELECT friend_list.friend_id, user_profile.id, user_profile.username
FROM `friend_list`
INNER JOIN `user_profile`
ON friend_list.friend_id = user_profile.id
where user_id = 1

Here is my model_friends

<?php
//model created to add user to database, sendmail etc...
require_once 'Zend/Db/Table/Abstract.php';

class Model_Friends extends Zend_Db_Table_Abstract
{
protected $_name = "friend_list";

public function fetchFriendList($userID)
{

    $accountsTable = array('up' => 'user_profile');
    $select = $this->select()
                   ->from($this->_name)
                   ->join($accountsTable, 'up.id = friend_List.friend_id', array())
                   ->where("up.id = ?", $userID);

    $result = $this->fetchAll($select);


    if ($result !== null){
        echo $select;
        return $result;
    } else {
        echo "no records found";
    }   
  }
}

the above model produces the follow SQL statement which is NOT what I want...

SELECT `friend_list`.* 
FROM `friend_list` 
INNER JOIN `user_profile` 
AS `up` 
ON up.id =     friend_List.friend_id 
WHERE (up.id = '1') 

adding the table structures as requested:

DROP TABLE IF EXISTS `buzz`.`friend_list`;
CREATE TABLE  `buzz`.`friend_list` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`friend_id` int(11) NOT NULL,
`approved_timestamp` date NOT NULL,
`status` varchar(15) DEFAULT 'pending',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `buzz`.`user_profile`;
CREATE TABLE  `buzz`.`user_profile` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mob` varchar(50) NOT NULL DEFAULT 'no info',
`dob` varchar(50) NOT NULL DEFAULT '',
`yob` varchar(50) NOT NULL DEFAULT '',
`language` varchar(75) NOT NULL DEFAULT 'English',
`gender` varchar(25) NOT NULL DEFAULT 'no info',
`about` varchar(1000) NOT NULL DEFAULT 'no info',
`country` varchar(45) NOT NULL DEFAULT 'no info',
`username` varchar(45) NOT NULL,
PRIMARY KEY (`id`,`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
  • 写回答

3条回答 默认 最新

  • dongyupen6269 2014-04-02 19:25
    关注

    the end result of my model_friends script is as follows:

    <?php
    //model created to add user to database, sendmail etc...
    require_once 'Zend/Db/Table/Abstract.php';
    
    class Model_Friends extends Zend_Db_Table_Abstract
    {
    protected $_name = "friend_list";
    
    public function fetchFriendList($userID)
    {       
        $select = $this->select()
                       ->from($this)
                       ->setIntegrityCheck(false)
                       ->join(array('u'=>'user_profile'), 'friend_list.friend_id =u.id', array())
                       ->columns(array('u.id', 'u.username'))
                       ->where("friend_list.user_id = ?", $userID);     
    
        $result = $this->fetchAll($select);                    
        if ($result !== null){
            echo $select;
            return $result;
        } else {
            echo "no records found";
        }   
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办