cakephp: как получить доступ к другой модели, которая не имеет связи
У меня есть 3 таблицы:
project
, amenities
и project_amenities
.
Я добавляю только форму проекта, Я хочу добавить новые удобства, которые сначала добавляются в таблицу удобств, а затем в таблицу project_amenities.
Итак, я определил эти отношения:
Project hasMany Amenities
Amenity belongsTo Project
Я объявил в projects_controller
:
var $uses = array('Amenity');
Это дает ошибку для моего действия add здесь
if (!empty($this->data)){
$this->Project->create();
Как
Notice (8): Undefined property: ProjectsController::$Project
[APPcontrollersprojects_controller.php, line 60]
Edit Кроме того, я не могу сделать:
$this->Amenity->create();
$insertData = array('name' => $this->data['Project']['Amenity'][$i]['name']);
$this->Amenity->save($insertData);
4 ответа:
Я хотел бы предложить вам использовать
$this->loadModel('ModelName');
в функции, где вам нужно. Затем вы можете использовать модель, как показано ниже$this->ModelName->function();
С помощью массива
$uses
он становится доступным для всего контроллера. Что повлияет на вашу производительность.
Я бы не рекомендовал использовать $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
Вы должны указать модель проекта в переменной $uses:
Но мне любопытно, почему у вас есть три таблицы, когда вам нужно одно отношение ко многим?$uses = array('Project','Amenity');
Решение для: сохранить для hasAndBelongsToMany
Я создал модель: projects_amenity.php, который имеет отношение к проекту и удобству. модель: проекты имеют отношение hasAndBelongsToMany с удобством контроллер: 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']); }