cakephp:如何访问另一个没有关联的模型

cakephp:如何访问另一个没有关联的模型,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我有三张桌子: 项目,便利设施和项目_便利设施 我只添加项目表单,我想添加新的便利设施,首先添加到便利设施表,然后添加到项目便利设施表 所以我定义了这些关系: 项目有很多便利设施 属于项目的便利设施 我在projects\u controller中声明: var$uses=array('amentity') 这使我的添加操作出错 if (!empty($this->data)){ $this->Project->create(); 作为 编辑 此外,我不能: $th

我有三张桌子:
项目
便利设施
项目_便利设施

我只添加项目表单,我想添加新的便利设施,首先添加到便利设施表,然后添加到项目便利设施表

所以我定义了这些关系:

项目有很多便利设施

属于项目的便利设施

我在
projects\u controller
中声明:
var$uses=array('amentity')

这使我的添加操作出错

if (!empty($this->data)){

    $this->Project->create();
作为

编辑 此外,我不能:

$this->Amenity->create();
$insertData = array('name' => $this->data['Project']['Amenity'][$i]['name']);
$this->Amenity->save($insertData);

必须在$uses变量中指定项目模型:

$uses = array('Project','Amenity');

但我很好奇,为什么在需要一对多关系时有三个表?

我不建议使用$uses=array(),因为它违背了建立模型关系的目的。此外,它还增加了相当多的开销

您应该尽可能使用模型关系:

$this->Project->create();
$this->Project->Amenity->create();
$this->Model1->Model2->Model3->Model4->create();
如果要使用不相关的模型,可以执行以下操作:

$this->loadModel('NewModelName');
$this->NewModelName->action();

签出并

解决方案:保存为HasandBelongTomany

我创造 模型:projects\u amentity.php,它与project和amentity有关系。 模式:项目与舒适性有关联 控制器:项目\设施\控制器

在代码中:

$this->loadModel('ProjectsAmenity');
for($i = 0; $i< count($this->data['Project']['Amenity']);$i++)
{                       
    $this->Amenity->create();   

    $insertData = array('name' => $this->data['Project']['Amenity'][$i]['name']);
    $amenity = $this->Amenity->save($insertData);   

    $amenityid = $this->Amenity->getLastInsertID();

    $projectid = $this->Project->getLastInsertID();

    $this->ProjectsAmenity->create();           
    $data['AmenityArr']  = array('project_id' =>  $projectid,'amenity_id' => $amenityid );

    $this->ProjectsAmenity->save($data['AmenityArr']);  
}
$this->loadModel('ProjectsAmenity');
对于($i=0;$idata['Project']['ament']);$i++)
{                       
$this->amentity->create();
$insertData=array('name'=>$this->data['Project']['ament'][$i]['name']);
$amenity=$this->amenity->save($insertData);
$AmentityId=$this->Amentity->getLastInsertID();
$projectid=$this->Project->getLastInsertID();
$this->ProjectsAmenity->create();
$data['amentityar']=array('project\u id'=>$projectid,'amentity\u id'=>$amentityId);
$this->ProjectsAmenity->save($data['amentityar']);
}

我建议您使用
$this->loadModel('ModelName')代码。然后您可以使用下面的模型

$this->ModelName->function();

通过使用
$uses
数组,它使整个控制器可用。这会影响你的表现。

此外,我不能这样做,$this->ament->create();$insertData=array('name'=>$this->data['Project']['ament'][$i]['name']);$this->amentity->save($insertData);根据表的名称判断,您可能希望将
projectament
关联更改为,将
项目设施
重命名为
项目设施
。是的,将项目设施重命名为项目设施…也改变了设施中的关系,因为有许多项目。此表中的插入仍然不起作用。在我看来,这是一种NxN关系,因为中间表
项目设施
是的,但OP不使用第三个表。。。正如他所描述的,这是一对多的关系这是您出错的原因,但您不需要这样做,因为Cake会根据表中的键自动进行这些关联。您的便利设施表中是否有
project\u id
?仅澄清我的想法:您不需要$uses变量。如果我有project\u便利设施表的多对多关系,我不需要$uses吗?我已经更改了便利设施中的关系,因为有许多项目。那么如何在此表中添加条目。。。
$this->ModelName->function();