2015-06-10 53 views
0

兩個表之間設置多個HABTM關係,我試圖讓這兩個表之間的兩個HABTM關係在CakePHP 2.6,但它給了我一個數據庫錯誤,當我嘗試創建一個記錄。我確定必須有一些模型設置或某些東西,但我無法修復它。 :(如何在CakePHP中

這裏的DB結構的一個img: http://i57.tinypic.com/k4wkyh.jpg

模型

class Solicitude extends AppModel { 
public $hasAndBelongsToMany = array(
    'Citante' => array(
     'className' => 'Cliente', 
     'joinTable' => 'citantes', 
     'foreignKey' => 'solicitude_id', 
     'associationForeignKey' => 'cliente_id', 
     'unique' => 'keepExisting', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
    ), 
    'Citado' => array(
     'className' => 'Cliente', 
     'joinTable' => 'citados', 
     'foreignKey' => 'solicitude_id', 
     'associationForeignKey' => 'cliente_id', 
     'unique' => 'keepExisting', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
    ) 
); 

}

控制器添加方法

public function add() { 
    if ($this->request->is('post')) { 
     $this->Solicitude->create(); 
     if ($this->Solicitude->save($this->request->data)) { 
      $this->Session->setFlash(__('The solicitude has been saved.')); 
      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The solicitude could not be saved. Please, try again.')); 
     } 
    } 
    $citantes = $this->Solicitude->Citante->find('list'); 
    $citados = $this->Solicitude->Citado->find('list'); 
    $this->set(compact('citantes', 'citados')); 
} 

添加視圖

echo $this->Form->create('Solicitude'); 

回波__( '添加關懷');

echo $this->Form->input('radicado'); 
    echo $this->Form->input('fecha'); 
    echo $this->Form->input('ccsede_id'); 
    echo $this->Form->input('ccusuario_id'); 
    echo $this->Form->input('consulta_id'); 
    echo $this->Form->input('peticiones'); 
    echo $this->Form->input('area_id'); 
    echo $this->Form->input('tipo_clase_id'); 
    echo $this->Form->input('Citante'); 
    echo $this->Form->input('Citado'); 

echo $ this-> Form-> end(__('Submit'));獲得添加

錯誤

錯誤:SQLSTATE [42S22]:柱未找到:1054未知列 'Citante.cliente_id' 在 '字段列表'

SQL查詢:SELECT Citantecliente_idconciliacionclientes AS Citante WHERE Citantesolicitude_id =「1」

+0

歡迎計算器!爲了更快地獲得問題的答案,如果您可以共享您目前嘗試使用的代碼,那將是非常好的。 –

+0

請將代碼放在您的問題中並進行格式化。它在評論中不可讀。 – nIcO

+0

現在是OK格式化.. –

回答

0

使用CakePHP 2,你可以在你的Solicitude模型中定義這些關係是這樣的:

var $hasAndBelongsToMany = array(

     'Citantes' => array(
      'className' => 'Client', 
      'joinTable' => 'citantes', 
      'foreignKey' => 'solicitude_id', 
      'associationForeignKey' => 'cliente_id' 
     ), 
     'Citados' => array(
      'className' => 'Client', 
      'joinTable' => 'citados', 
      'foreignKey' => 'solicitude_id', 
      'associationForeignKey' => 'cliente_id' 
     ) 
    ); 

你有兩個的唯一的事情就是設置兩個不同關係的名字,這裏CitantesCitados 。它們是用來獲取記錄的名稱。

而且使用CakePHP 3,本想這樣做在你的SolicitudesTable表:

$this->belongsToMany('Citantes', [ 
      'className' => 'Client', 
      'joinTable' => 'citantes', 
      'foreignKey' => 'solicitude_id', 
      'targetForeignKey' => 'cliente_id' 
     ]); 

$this->belongsToMany('Citados', [ 
      'className' => 'Client', 
      'joinTable' => 'citados', 
      'foreignKey' => 'solicitude_id', 
      'targetForeignKey' => 'cliente_id' 
     ]); 
+0

嗨記錄......和感謝ü.. 我有這個在我的模型 \t公共$ hasAndBelongsToMany =陣列( \t \t 'Citante'=>陣列( \t \t \t '的className'=> 'Cliente', \t \t \t 'joinTable'=>「citantes 」, \t \t \t 'FOREIGNKEY'=> 'solicitude_id', \t \t \t 'associationForeignKey'=> 'cliente_id', \t \t \t獨特'=> 'keepExisting', \t \t) \t \t 'Citado'=>數組( \t \t \t '的className'=> 'Cliente', \t \t \t 'joinTable'=> 'citados', \t \t \t 'FOREIGNKEY'=> 'solicitude_id', \t \t \t 'associationForeignKey'=> 'cliente_id', \t \t \t '獨特的'=> 'keepExisting', \t \t) \t); –

+0

但是,當我加入即時通訊獲取該錯誤.. 錯誤:SQLSTATE [42S22]:列未找到:1054'字段列表'中的未知列'Citante.cliente_id' SQL查詢:SELECT'Citante'.'cliente_id' FROM 'conciliacion'.'clientes'因爲'Citante'在哪裏'Citante'.'solicitude_id' ='1' –