您好,感谢您的阅读,
我有两张桌子(使用tablegateway) projet和l_agent_projet 它们是正确设置的,我可以使用它们来插入,删除,更新等我的数据库
我正在尝试使用此功能加入这两个表:
public function getAgentsByProject($id_projet)
{
$sql = new Sql( $this->tableGateway->adapter ) ;
$where = new Where() ;
$where -> equalTo( 'l_agent_projet.id_projet', $id_projet ) ;
$select = $sql->select() ;
$select -> from ( $this->tableGateway->getTable() )
-> join ( 'projet' , 'projet.id_projet = l_agent_projet.id_projet')
-> where( $where ) ;
$result = $this->tableGateway->selectWith($select) ;
return $result ;
}
但是当我尝试读取结果时,在我的一个控制器中使用它:
$test = $this->InitProjectByIDAgentTable()->getAgentsByProject('1') ;
var_dump($test) ;
echo "<br />" ;
foreach ( $test as $tmp1 ):
foreach ( $tmp1 as $tmp2 ):
echo $tmp2 ;
echo '+' ;
endforeach ;
echo "<br />" ;
endforeach ;
这就是我所拥有的:
object(Zend\Db\ResultSet\ResultSet)#236 (8) { ["allowedReturnTypes":protected]=> array(2) { [0]=> string(11) "arrayobject" [1]=> string(5) "array" } ["arrayObjectPrototype":protected]=> object(Application\Model\LAgentProject)#220 (2) { ["id_agent"]=> NULL ["id_projet"]=> NULL } ["returnType":protected]=> string(11) "arrayobject" ["buffer":protected]=> NULL ["count":protected]=> int(2) ["dataSource":protected]=> object(Zend\Db\Adapter\Driver\Pdo\Result)#235 (8) { ["statementMode":protected]=> string(7) "forward" ["resource":protected]=> object(PDOStatement)#234 (1) { ["queryString"]=> string(179) "SELECT "l_agent_projet".*, "projet".* FROM "l_agent_projet" INNER JOIN "projet" ON "projet"."id_projet" = "l_agent_projet"."id_projet" WHERE "l_agent_projet"."id_projet" = :where1" } ["options":protected]=> NULL ["currentComplete":protected]=> bool(false) ["currentData":protected]=> NULL ["position":protected]=> int(-1) ["generatedValue":protected]=> NULL ["rowCount":protected]=> int(2) } ["fieldCount":protected]=> int(7) ["position":protected]=> int(0) }
1+1+
3+1+
它说[“fieldCount”:protected] =&gt; int(7),但只能打印对应于l_agent_projet表的前两个字段。所以有一个问题。
但是当我复制生成的sql命令时:
SELECT "l_agent_projet".*, "projet".*
FROM "l_agent_projet"
INNER JOIN "projet" ON "projet"."id_projet" = "l_agent_projet"."id_projet"
WHERE "l_agent_projet"."id_projet" = :'1'"
效果很好,打印所有字段。
我是ZF2的新手,我不明白这里发生了什么。 ps:使用PDO处理postgresql:pgsql
答案 0 :(得分:1)
您需要使用以下这两行:
$statement = $sql->prepareStatementForSqlObject($select);
$result = $statement->execute();
而不是行:
$result = $this->tableGateway->selectWith($select) ;
以上行将返回数据数组。
答案 1 :(得分:0)
要在表网关模型中使用prepareStatementForSqlObject(),您需要一个\ Zend \ Db \ Sql \ _Sql的实例,为此,您需要一个适配器。
$adapter = $this->tableGateway->getAdapter();
$sql = new Sql($adapter);
$statement = $sql->prepareStatementForSqlObject($select);
$result = $statement->execute();