cakephp: как получить доступ к другой модели, которая не имеет связи - PullRequest
3 голосов
/ 13 июля 2011

У меня есть 3 таблицы: project, amenities и project_amenities.

Я добавляю только форму проекта, я хочу добавить новые удобства, которые сначала добавляются в таблицу удобств, а затем в таблицу project_aferences.

Итак, я определил эти отношения:

Project hasMany Amenities

Amenity belongsTo Project

Я объявил в projects_controller: var $uses = array('Amenity');

Это дает ошибку для моего действия добавления здесь

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

    $this->Project->create();

как

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 ]

5 голосов
/ 13 июля 2011

Я бы не рекомендовал использовать $ using = 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

3 голосов
/ 29 августа 2011

Я хотел бы предложить вам использовать $this->loadModel('ModelName'); в функции, где вам нужно.Затем вы можете использовать модель, как показано ниже:

$this->ModelName->function();

Используя массив $uses, он становится доступным для всего контроллера.Что повлияет на вашу производительность.

0 голосов
/ 14 июля 2011

Решение для: сохранить за hasAndBelongsToMany

Я создал модель: projects_amenity.php, которая имеет отношение к проекту и удобству. модель: проекты имеет отношение имеет и имеет много удобств Контроллер: проекты_Удобства_Контроллер

и в коде:

$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']);  
}
0 голосов
/ 13 июля 2011

Вы должны указать модель проекта в переменной $ использовании:

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

но мне любопытно, почему у вас три таблицы, когда вам нужны отношения один ко многим?

...