CakePHP的1.3深HABTM与条件
问题描述:
我有以下型号找到。
这里的情况是: Carrier
HABTMStore
和Store
HABTMCarrier
。 Carrier
也hasManyClassification
。
我一直在尝试过去8小时左右,以获得所有的Carriers
其中Store.id = 152
。
我遇到麻烦的是,我想要得到的数组包括从Carriers
。我也想按Classifications
排序。
我尝试了很多东西。我所有的答案都没有得到正确的carriers
没有包括classifications
或得到全部carriers
与classifications
包括在内。
我尝试了可容纳的,它似乎并没有限制结果,它似乎抓住所有的承运人,并留下商店空白,如果他们不是正确的商店。
我试过连接,但是我无法成功获得该工作。
我可能做错了什么,但我不能为我的生活弄清楚。
与代码
CakePHP的1.3深HABTM与条件
class Carrier extends AppModel
{
var $name = 'Carrier';
var $actsAs = array('Containable');
var $hasAndBelongsToMany = array('Rect','Store');
var $belongsTo = array('Classification','Category');
}
class Store extends AppModel
{
var $name = 'Store';
var $hasAndBelongsToMany = array('Carrier');
var $belongsTo = array('SparkPlug.User');
var $actsAs = array('Containable');
}
class Classification extends AppModel
{
var $name = 'Classification';
var $actsAs = array('Containable');
var $hasMany = 'Carrier';
}
答
的一个解决方案,我发现包括在创建的habtm模型,并通过使用包含使对条件和手动加入子句。
模型代码是这样的:
store.php
<?
class Store extends AppModel {
var $actsAs = array('Containable');
var $hasMany = array('CarriersStore');
}
?>
carrier.php
<?
class Carrier extends AppModel {
var $actsAs = array('Containable');
var $hasMany = array('CarriersStore');
}
?>
carriers_store.php
<?
class CarriersStore extends AppModel {
var $belongsTo = array('Store', 'Carrier');
var $actsAs = array('Containable');
}
?>
然后,在carriers_controller.php
棘手的语法应用条件,并获得两个商店和运营商模式是:
$carriers = $this->Carrier->find('all', array(
'conditions' => array('CarrierStore.store_id' => 1),
'contain' => array('CarriersStore' => array('Store')),
'joins' => array(
array(
'table' => 'carriers_stores',
'alias' => 'CarrierStore',
'type' => 'INNER',
'conditions' => array('CarrierStore.carrier_id = Carrier.id')
)
)
));
我希望这有助于。这个问题困扰了我很多时间,直到最近才找到解决方法。
您可以在代码大括号中粘贴模型吗?如果可以,我很乐意提供帮助。 –
添加代码。谢谢你提供的所有帮助! – Johnston