如何在ZF2中的sql语句中准备sql语句?

时间:2016-02-26 16:02:39

标签: php mysql zend-framework2

我是ZF2的新手,我遇到了以下问题:

  

在db-table中,我有两个id引用另一个表。如果我   选择它们,我想显示球员的名字,而不是   id已保存在表格中。

player (id, name)

board (id, playerA, playerB)

playerAplayerB是整数,并且在玩家表中持有玩家的ID。我已经与skeleton-app相处,但我可以传递给tableGateway->select()的唯一条款是where子句。

有没有人有想法?我如何在ZF2中准备这样的声明?

SELECT id, (SELECT name FROM player WHERE id = playerA) AS playerA, (SELECT name FROM player WHERE id = playerB) AS playerB FROM board

我发现的教程和参考资料最终都以JOIN结束。但那不适合这里,对吗?

编辑: 以下是它,什么适用于骨架应用程序

protected $select;

public function fetchAll()  {

$this->select = new Select();

$this->select->from('board')
    ->columns(array('id', 'kindOf', ...))
    ->join(['pA' => 'player'], 'pA.id = board.playerA', ['playerA' => 'name'])
    ->join(['pB' => 'player'], 'pB.id = board.playerB', ['playerB' => 'name']);

$resultSet = $this->tableGateway->selectWith($this->select);
return $resultSet;
}

1 个答案:

答案 0 :(得分:0)

您的问题是ZF2问题,但是SQL问题。你可以这样写:

SELECT id, pA.name AS playerA, pB.name AS playerB
FROM board
INNER JOIN player AS pA ON pA.id=board.playerA
INNER JOIN player AS pB ON pB.id=board.playerB

在ZF2中:

$select = new Select();
$select->from('board')
       ->columns('id')
       ->join(['pA' => 'player', 'pA.id = board.playerA', ['playerA' => 'name'])
       ->join(['pB' => 'player', 'pB.id = board.playerB', ['playerB' => 'name'])