2011-07-13 180 views
3

私は3つのテーブル: project,amenitiesおよびproject_amenitiesを持っています。cakephp:関連付けられていない別のモデルにアクセスする方法

私はプロジェクトフォームのみを追加します。私は、初めてアメニティテーブルとproject_amenitiesテーブルに追加された新しいアメニティを追加します。

だから私はこれらの関係を定義した:

Project hasMany Amenities

Amenity belongsTo Project

私はprojects_controllerに宣言: var $uses = array('Amenity');

これはここ

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

    $this->Project->create(); 
私の追加アクションのためにエラーが発生します10

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

でも、これはできません。 $ this-> Amenity-> create(); \t $ insertData = array( 'name' => $ this-> data ['Project'] ['Amenity'] [$ i] ['name']); \t \t \t \t \t $ this->アメニティ - > save($ insertData); – vibha

+0

テーブルの名前で判断すると、 'Project <->アメニティ'関連を[HABTM](http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM)に変更し、 'project_amenities'の名前を' projects_amenities'です。 – lxa

+0

はいproject_amenitiesをprojects_amenitiesにリネームしました... hasMany Projects ...と同様に施設内のリレーションシップを変更しました。このテーブルの挿入は機能していません – vibha

答えて

3

私はあなたが必要な機能で$this->loadModel('ModelName');を使用することをお勧めしたいと思います。そして、あなたはそれが全体のコントローラに利用できるよう$uses配列を使用することにより

$this->ModelName->function(); 

以下のようにモデルを使用することができます。あなたのパフォーマンスに影響を与えます。

0

を:

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

が、私は」なぜあなたは1対多数の関係が必要なときに3つのテーブルを持っていますか?

+0

このソリューションはありがたいです.... – vibha

+0

そのNxN関係は仲介テーブル 'project_amenities' – pleasedontbelong

+0

yeapしかし、OPは3番目のテーブルを使用していません...彼が記述したように、それは1対多の関係 – Headshota

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

0

ソリューション:hasAndBelongsToManyのために保存

私は というモデル:projects_amenity.phpを作成しました。関係はbelongsToプロジェクトとアメニティを持っています。 モデル:

とコードでprojects_amenities_controller

:プロジェクトはアメニティ コントローラとの関係hasAndBelongsToManyのを持っている

$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']); 
} 
関連する問題