cakephp: how to access another model, which has no association

百般思念 提交于 2019-12-24 00:19:24

问题


I've 3 tables: project, amenities and project_amenities.

I add project form only, i want to add new amenities, which first added to amenities table and then project_amenities table.

So I defined these relations:

Project hasMany Amenities

Amenity belongsTo Project

I declared in projects_controller: var $uses = array('Amenity');

This gives error for my add action here

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

    $this->Project->create();

as

Notice (8): Undefined property: ProjectsController::$Project 
[APP\controllers\projects_controller.php, line 60]

edit Also, I cannot do:

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

回答1:


I would like to suggest you to use $this->loadModel('ModelName'); in the function where you needed. Then you can use the model as below

$this->ModelName->function();

By using $uses array it make available to entire controller. Which will affect your performance.




回答2:


I wouldn't recommend using $uses = array() as it defies the purpose of having model relationships. Plus it adds a fair bit of overhead too.

You should use your model relationships where ever possible:

$this->Project->create();
$this->Project->Amenity->create();
$this->Model1->Model2->Model3->Model4->create();

If you want to use an unrelated model, you can do:

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

Check out http://book.cakephp.org/view/1031/Saving-Your-Data and http://book.cakephp.org/view/992/loadModel




回答3:


you must specify the project model in your $uses variable:

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

but I'm curious why do you have three tables when you need one to many relationship?




回答4:


Solution for :save for hasAndBelongsToMany

I created model: projects_amenity.php which has relation belongsTo project and amenity. model: projects has relation hasAndBelongsToMany with amenity controller: projects_amenities_controller

and in code:

$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']);  
}


来源:https://stackoverflow.com/questions/6678903/cakephp-how-to-access-another-model-which-has-no-association

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!