ZF2 Postgres查询多对多

时间:2015-08-11 15:02:58

标签: database zend-framework2

我试图搜索这个,但我无法在谷歌上提出我的问题。也许有一些我不知道的术语。

我有两张桌子,一张用于客户,另一张用于电话号码。每个客户都可以有很多电话号码。对于每个客户,我想添加与他相关的电话号码。所以我的所作所为:

$clients = $this->select();
$result = array();
foreach ($clients as $key => $client) {
    $client->phones = $this->getClientPhones($client->cli_id);
    $result[$key] = $client;
}

这很有效。但是,如果有最好的方法,我想知道这是否是正确的方法。

感谢。

1 个答案:

答案 0 :(得分:0)

这种方法的主要问题是你基本上用很多查询来骚扰你的数据库。您基本上要求客户列表,然后是客户端1的电话号码列表,然后是客户端2的电话号码列表,然后是客户端3的电话号码列表等。

更好的方法是请求数据库一次检索客户端列表,然后再次获取所有检索到的客户端的电话号码列表。

$clients = $this->select();
$clientIds = array_map(function($client){ return $client->cli_id; }, $clients);
$clientPhones = $this->getAllClientPhones($clientIds);
// do something with phone numbers

在sql中,getAllClientPhones的工作方式与getClientPhones非常相似,但使用WHERE client_id IN (?)代替WHERE client_id = ?

相关问题