如何使用codeigniter中的连接数据?

时间:2009-12-23 11:14:15

标签: php activerecord codeigniter

我正在玩codeigniter并试图让我的头围绕着活跃的唱片系统等等。 我已经设置了几个表,并试图在它们上运行连接,如下:

function GetOrganisationsAndBuildingDetails()
{
    $this->db->select('organisations.organisation_name,
                       organisations.organisation_id,
                       buildings.building_name,
                       buildings.address1');
    $this->db->from('organisations')->join('buildings', 'buildings.organisation_id = organisations.organisation_id');
    $query = $this->db->get();
    return $query->result();
}

在我的数据库中,我有一个组织有两个相关的建筑物。上面的查询返回两个对象(每个建筑物一个) - 但是,组织是重复的。

  • stdClass对象( [organisation_name] =>这是一个示例组织 [organisation_id] => 1 [building_name] =>测试大楼 [address1] => 123456)

  • stdClass对象( [organisation_name] =>这是一个示例组织 [organisation_id] => 1 [building_name] =>最好的建筑 [address1] => 123456)

我想我期待一个返回对象的线条,其中包含一系列相关建筑物的嵌套对象。这可能吗? 如果没有,他们是一种推荐的方式来安排返回数据,以便我可以轻松地在视图中循环它? (foreach org,foreach building等)。

如果我在这里有点密集,请道歉。我来自.net和(特别是linq到SQL)这个东西有点不同)

1 个答案:

答案 0 :(得分:1)

如你所说,查询将不可避免地返回重复数据,你必须在得到这样的结果后组织它们

$buildings = array();

foreach ( $result_object as $organization ) {
    $building_data = array(
        'building_name' => $organization->building_name,
        'address'       => $organization->address,
    );
    $buildings[$organization->organization_name][] = $building_data;
}

这样,组织将在多维数组的第一个键中“压缩”,并且在更深层次的情况下,您将获得有关建筑物的信息。希望这会有所帮助。