我有3张桌子:
project
,amenities
和project_amenities
。
我只添加项目表单,我想添加新的设施,首先添加到设施表,然后添加project_amenities表。
所以我定义了这些关系:
Project hasMany Amenities
Amenity belongsTo Project
我在projects_controller
宣布:
var $uses = array('Amenity');
这为我的添加操作提供了错误
if (!empty($this->data)){
$this->Project->create();
as
Notice (8): Undefined property: ProjectsController::$Project
[APP\controllers\projects_controller.php, line 60]
修改 另外,我做不到:
$this->Amenity->create();
$insertData = array('name' => $this->data['Project']['Amenity'][$i]['name']);
$this->Amenity->save($insertData);
答案 0 :(得分:5)
我不建议使用$ uses = array(),因为它违背了建立模型关系的目的。此外,它也增加了相当多的开销。
您应尽可能使用模型关系:
$this->Project->create();
$this->Project->Amenity->create();
$this->Model1->Model2->Model3->Model4->create();
如果您想使用不相关的模型,您可以这样做:
$this->loadModel('NewModelName');
$this->NewModelName->action();
结帐http://book.cakephp.org/view/1031/Saving-Your-Data和http://book.cakephp.org/view/992/loadModel
答案 1 :(得分:3)
我建议您在所需的功能中使用$this->loadModel('ModelName');
。然后你可以使用下面的模型
$this->ModelName->function();
通过使用$uses
数组,它可供整个控制器使用。这将影响您的表现。
答案 2 :(得分:0)
您必须在$ uses变量中指定项目模型:
$uses = array('Project','Amenity');
但我很好奇为什么当你需要一对多关系时,你有三张桌子?
答案 3 :(得分:0)
解决方案:为hasAndBelongsToMany保存
我创造了 model:projects_amenity.php,它具有关系属于项目和设施的关系。 model:项目有关系hasAndBelongsToMany with amenity controller:projects_amenities_controller
并在代码中:
$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']);
}