查询CakePHP 3.x ORM中的多个表

时间:2014-12-10 01:06:17

标签: php cakephp

我有三个表国家,城市地址。他们的关系是国家有很多城市,城市有很多地址。所以像这样的国家 - >城市 - >地址。

如果我想获得某个城市的所有地址,我可以这样做

$this->paginate = [
        'contain' => ['Cities']
    ];
    $this->set('addresses', $this->paginate($this->Addresses));

如果我想让所有城市都进入某个国家,我也可以这样做。

我想要的是我想获得某个国家/地区的所有地址。

注意:地址 包含国家/地区的外键,而不是在城市中。

可能的查询是:SELECT a.*, c.* FROM countries a LEFT JOIN cities b ON a.id=b.country_id LEFT JOIN addresses c ON b.id=c.city_id

1 个答案:

答案 0 :(得分:0)

我认为你在找这样的东西(from the docs):

    <?php

    $query = $countries->find()
        ->hydrate(false)
        ->join([
            'City' => [
                'table' => 'cities',
                'type' => 'LEFT',
                'conditions' => 'Country.id = City.country_id'
            ],
            'Address' => [
                'table' => 'addresses',
                'type' => 'LEFT',
                'conditions' => 'City.id = Address.city_id'
            ]
        ]);

hydratate方法告诉ORM不要尝试生成实体。如果您希望生成实体,请尝试删除该部分。