2014-02-19 68 views
1

我試圖用HasAndBelongsToMany關係保存一些數據。 這裏是我的表:CakePHP不保存正確的數據在HABTM的情況下

廣告:

  • ID(INT)AI
  • 名(爲varchar)

展廳:

  • ID( int)AI
  • 名(爲varchar)

commercials_showrooms:

  • ID(INT)AI
  • commercial_id(INT)
  • showroom_id(INT)

和我型號:

class Showroom extends AppModel 
{ 
    public $hasAndBelongsToMany = array(
     'Commercial', 
    ); 
} 

class Commercial extends AppModel 
{ 
    public $hasAndBelongsToMany = array(
     'Showroom' 
    ); 
} 

我想保存數據(硬編碼現在)這樣說:

$this->loadModel('Showroom'); 
$this->Showroom->saveAll(array(
      'Showroom' => array(
       'id' => 1 
      ), 
      'Commercial' => array(
       'name' => 'test' 
      ) 
     )); 

白水()返回(布爾)真實的,但是,沒有保存在數據庫中。 我該如何解決這個問題?

+0

嘗試保存'陣列(陣列( 「陳列室'=> array( 'id'=> 1 ), 'Commercial'=> array( 'name'=>'test' ) )''。另外,你的蛋糕版是什麼?並且:您是否收到驗證錯誤(您是否在保存前嘗試過驗證)? – Nunser

+0

我確實嘗試過,這是行不通的。 我正在使用CakePHP 2.4.1 對於我試圖保存的模型沒有驗證。 –

+0

您正在測試的方式也不正確。 – Fury

回答

1

您是否閱讀了關於"Saving Related Model Data (HABTM)" in the CakePHP book的部分?

它表明與您用於數據的格式不同。

+0

我看不出有什麼區別。 –

+2

區別在於額外的周圍陣列,就像我說你應該嘗試的陣列。但是你說那也行不通。至少它給了你不同的錯誤嗎? – Nunser

+0

@dynamic_cast:不要只使用你看到的第一個例子 - 閱讀「你也可以使用這種格式來保存幾個記錄和他們與saveAll()的HABTM關聯的部分...」 – Dave

0

,以測試你的表,如果正在嘗試這種在你的控制器:

$this->loadModel('CommercialsShowroom'); 

$CommercialsShowroom = array('CommercialsShowroom'=>array(
                  'commercial_id'=>your_value, 
                  'showroom_id'=>your_value)); 
$this->CommercialsShowroom->create(); 
if ($this->CommercialsShowroom->save($CommercialsShowroom, false)){ 
    var_dump('It is saved'); 
} 

和型號配置讀取戴夫鏈接,瞭解更多信息

//CommercialsShowroom model: 

     var $belongsTo = array(
     'Commercial' => array(
      'className' => 'Commercial', 
      'foreignKey' => 'commercial_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '' 
     ), 
     'Showroom' => array(
      'className' => 'Showroom', 
      'foreignKey' => 'showroom_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '' 
     ) 
    ); 

//Showroom model: 

    var $hasAndBelongsToMany = array(
     'Commercial' => array(
      'className' => 'Commercial', 
      'joinTable' => 'commercials_showrooms', 
      'foreignKey' => 'commercial_id', 
      'associationForeignKey' => 'showroom_id', 
      'unique' => true, 
     ) 
    ); 

//Commercial model: 

    var $hasAndBelongsToMany = array(
     'Showroom' => array(
      'className' => 'Showroom', 
      'joinTable' => 'commercials_showrooms', 
      'foreignKey' => 'showroom_id', 
      'associationForeignKey' => 'commercial_id', 
      'unique' => true, 
     ) 
    );