0

在 CakePHP 中,我有两个表,国家和网络。他们有 HABTM 关系,并由 countries_networks 加入。

我正在尝试从国家/地区表中获取所有国家/地区,其中 Networks 中的“名称”字段 = 'o2'

我意识到我不能使用基本的 find() 来做到这一点,所以我一直在试验可包含的行为。我设法限制了返回的数据,但看起来“可包含”并不能完全按照我的意愿工作。这是我的代码:

$countries = $this->Country->find('all', array('contain' => array(
                                'Network' => array(
                                'conditions' => array('Network.name =' => "o2"),
    )
    )));

但是,此查询返回所有国家,如果它是“o2”,则返回 Network.name。我真正需要做的是只返回 Network.name 为“o2”的国家/地区,而不返回其他国家/地区。

任何人都可以帮忙吗?谢谢。

4

4 回答 4

2

"=' =>" 是什么?“Network.name”后无需使用“=”符号

于 2009-06-18T15:50:02.267 回答
1

你应该能够做这样的事情:

$this->Country->hasAndBelongsToMany['Network']['conditions'] = array('Network.name'=>'o2');
$myCountries = $this->Country->find('all');

我还没有测试过这个,但它应该让你非常接近你需要的地方。

另外,请记住,像这样更改 hasAndBelongsToMany 数组将影响当前页面加载期间对该模型的所有后续查询(但它将在下一次实例化模型时重置)。

于 2009-06-18T16:16:48.297 回答
1

我在出门的路上,很抱歉简短的解释。

我认为您想要的是 HABTM 关系,但能够根据关联模型的数据进行过滤。为此,请查看 Cake 手册中的“可包含”行为。很确定这就是你所追求的。

于 2009-06-18T19:49:54.973 回答
1

您的查询将准确返回您的要求。尝试从网络中选择。

$countries = $this->Country->Network->find('first', array(
    'conditions' => array('Network.name' => "o2"),
    'contain' => array('Country')
));

$countries = $countries['Country'];
于 2009-06-19T10:22:16.350 回答