从Cake PHP中的关联表fieldname ='x'的表中选择

时间:2009-06-18 14:55:37

标签: cakephp mysql associations

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

我正试图让所有国家/地区的所有国家/地区都显示在Networks ='o2'中的'name'字段

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

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

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

有人可以帮忙吗?感谢。

4 个答案:

答案 0 :(得分:2)

“='=>” 它是什么?在“Network.name”

之后不需要使用“=”符号

答案 1 :(得分:1)

你应该可以这样做:

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

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

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

答案 2 :(得分:1)

我正在出门,很抱歉这个简短的解释。

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

答案 3 :(得分:1)

您的查询完全返回您的要求。 尝试从网络中选择。

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

$countries = $countries['Country'];