Zend 2加入select

时间:2015-01-15 14:44:30

标签: join zend-framework2 tablegateway

我必须使用Zend 2中的select进行连接,有没有办法做到这一点?我看到连接期望第一个paremetr是一个字符串(你加入的表的名称)。 我设法用另一个选择使用类似的东西做了一个选择

$this->select(function (Select $select) use ($params)

但是再次加入(函数(选择$ select))并不起作用。

2 个答案:

答案 0 :(得分:0)

连接有两个必需参数,表的名称和要连接的条件。您还可以选择指定要返回的列和连接类型,默认为内连接。这是一个为帖子提取作者的简单示例。

// First you need to create the select object
$select = $sql->select();
$select->from('posts');

// then join to the people table
$select->join('people', 'posts.author_id = people.id', array('first_name','last_name'));

答案 1 :(得分:0)

    Please add below code on top of model class
    ------------------------------------------
    use Zend\Db\Sql\Expression;
    use Zend\Db\Sql\Predicate;
    use Zend\Db\Sql\Sql;

    Then You can use this code
    --------------------------
    $sql = new Sql($this->adapter);
    $select = $sql->select();
    $select->from(array('nxyr' => 'node-x-y-relation'));
    $join = new Expression("ni.node_id = nxyr.node_x_id and ni.node_type_id IN (" . $nodeTypeStr . ")");
    $join2 = new Expression("np.node_id = nxyr.node_x_id and np.node_type_id = 2");
    $join3 = new Expression("nc.node_id = nxyr.node_x_id and nc.node_type_id = 2");
    $select->join(array('nc' => 'node-class'), $join3, array('node_type_id'), 'Left');
    $select->join(array('ni' => 'node-instance'), $join, array('node_type_id'), 'Left');
    $select->join(array('np' => 'node-instance-property'), $join2, array('node_type_id'), 'Left');

    $select->where->equalTo('nxyr.node_y_id', $node_id);
    $statement = $sql->prepareStatementForSqlObject($select);

    $result = $statement->execute();
    $resultObj = new ResultSet();
    $nodeXYArr = $resultObj->initialize($result)->toArray();