Zend 2 присоединиться к избранным
Я должен сделать соединение с помощью select в Zend 2, есть ли способ сделать это? Я видел, что join ожидает, что первый paremetr будет строкой (имя таблицы, к которой вы присоединяетесь). Мне удается сделать выбор с другим выбором, используя что-то вроде этого
$this->select(function (Select $select) use ($params)
Но снова объединение (функция (Выбрать $select)) не работает.
2 ответа
Объединение имеет два обязательных параметра: имя таблицы и условие для объединения. Вы также можете при желании указать столбцы для возврата и тип соединения, который по умолчанию является внутренним соединением. Вот быстрый пример получения автора сообщения.
// 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'));
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();