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

时间:2011-07-13 12:31:05

标签: cakephp cakephp-1.3

我有3张桌子: projectamenitiesproject_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);

4 个答案:

答案 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-Datahttp://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']);  
}
相关问题