我是ZF2的新手,我遇到了以下问题:
在db-table中,我有两个id引用另一个表。如果我 选择它们,我想显示球员的名字,而不是 id已保存在表格中。
player (id, name)
board (id, playerA, playerB)
playerA
和playerB
是整数,并且在玩家表中持有玩家的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;
}
答案 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'])