在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”且没有其他国家/地区的国家/地区。
有人可以帮忙吗?感谢。
答案 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'];