使用Zend Framework进行内部联接的最佳方法?

时间:2009-11-23 21:21:02

标签: zend-framework inner-join zend-db zend-db-table zend-db-select

似乎有几种不同的方法可以使用Zend Framework连接两个表,但我以前从未这样做过,所以我不知道哪种方法最好。

这就是我要做的......

我的数据库中有3个表:

users
    ( id , name )
groups
    ( id , name )
group_members
    ( id , group_id , user_id )

我正在尝试查找用户所属的组并将其显示给用户。这个SQL语句几乎完成了这项工作(虽然可能有更好的方法来编写它)。它只返回我关注的列,它们是组的id和标题。

    SELECT groups.id, groups.title
    FROM group_members
        INNER JOIN groups
        ON groups.id = group_members.group_id
    WHERE user_id = $userId

如何使用Zend Framework执行此操作?

2 个答案:

答案 0 :(得分:9)

最后想出了如何做到这一点。如果你有更好的方法,请告诉我。

$db = Zend_Db_Table::getDefaultAdapter(); //set in my config file
$select = new Zend_Db_Select($db);
$select->from('groups', array('id', 'title')) //the array specifies which columns I want returned in my result set
    ->joinInner(
        'group_members',
        'groups.id = group_members.group_id',
        array()) //by specifying an empty array, I am saying that I don't care about the columns from this table
    ->where('user_id = ?', $userId);
$resultSet = $db->fetchAll($select);

这将返回一个只包含id和title列的表。空array()是删除我不关心的列的关键。然后我可以用结果集做点什么。

foreach ($resultSet as $row) {
    //do something with $row->id or $row->title
}

答案 1 :(得分:0)

不需要使用Join,我们可以使用Zend_Db_Table代替MVC模式的原因。我有这个想法来自菲利普的here,#10。(可能他们称之为“表数据网关”?)