zend framework zend-framework zend-db-table zend-db-select

zend framework - framework - Traducir una consulta para usar Zend_Db_Select



zend framework db limit (2)

Cuando se recupera de su objeto de tabla, la declaración se limitará a esa tabla, creo. Los métodos Zend_Db_Table::select() devuelven un objeto Zend_Db_Table_Select que es una subclase de Zend_Db_Select e impone esta restricción. Pruebe esto en su lugar:

$db = Zend_Db::factory( ...options... ); $select = new Zend_Db_Select($adapter); $select->from( ''my_table_name'' )->join( ...

Si lo prefiere, lo siguiente debería ser equivalente:

$db = Zend_Db::factory( ...options... ); $db->select()->from( ''my_table_name'' )->join( ...

Tengo problemas para traducir esta consulta y usar Zend_Db_Select de ZF:

SELECT b.id, b.title, b.description FROM memberships AS m JOIN blogs AS b ON b.id = m.blog_id WHERE m.user_id = ? ORDER BY m.created LIMIT 0, 30

(esta consulta funciona y devuelve resultados)

Memberships es una tabla de enlaces entre blogs y users . Es un simple | id | blog_id | user_id | | id | blog_id | user_id | asunto.

Esto es lo que tengo hasta ahora:

// $table = Zend_Db_Table instance, $id = a user id $select = $table->select() ->from(array(''m'' => ''memberships''), array(''b.id'', ''b.title'', ''b.description'')) ->join(array(''b'' => ''blogs''), ''b.id = m.blog_id'') ->where(''m.user_id = ?'', (int) $id) ->order(''m.created DESC'') ->limit(0, 30);

Este es el error (extraño (para mí)) que obtengo:

#0: Select query cannot join with another table

Ocurrió en la línea 211 de D:/.../library/Zend/Db/Table/Select.php .

Gracias por tu ayuda.


También podría seguir utilizando el objeto tradicional $ model-> select () agregando setIntegrityCheck (false), de esa manera.

$select = $table->select() ->setIntegrityCheck(false) ->from(array(''m'' => ''memberships''), array(''b.id'', ''b.title'', ''b.description'')) ->join(array(''b'' => ''blogs''), ''b.id = m.blog_id'') ->where(''m.user_id = ?'', (int) $id) ->order(''m.created DESC'') ->limit(0, 30);

Esto desactiva el cheque que arroja la excepción:

#0: Select query cannot join with another table