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();