2011-04-25 62 views
2

我有3個表格:用戶,estruturas和estruturas_users。 Estruturas包含以下字段:id,name,user_id和hasAndBelongsToMany Users。CakePHP:與HABTM的同一模型的多重關係

用戶模型:

class User extends AppModel { 
    var $name = 'User'; 
    var $hasAndBelongsToMany = array(
     'Estrutura' => array(
      'className' => 'Estrutura', 
      'joinTable' => 'estruturas_users', 
      'foreignKey' => 'user_id', 
      'associationForeignKey' => 'estrutura_id', 
      'unique' => true 
     ) 
    ); 
} 

Estruturas模型:

class Estrutura extends AppModel { 
    var $name = 'Estrutura'; 

    var $belongsTo = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '' 
     ) 
    ); 


    var $hasAndBelongsToMany = array(
     'User' => array(
      'className' => 'User', 
      'joinTable' => 'estruturas_users', 
      'foreignKey' => 'estrutura_id', 
      'associationForeignKey' => 'user_id', 
      'unique' => true 
     ) 
    ); 
} 

Estruturas控制器:

function edit($id = null) { 
    $this->layout = 'admin'; 
    if (!$id && empty($this->data)) { 
     $this->Session->setFlash(__('Invalid estrutura', true)); 
     $this->redirect(array('action' => 'admin')); 
    } 
    if (!empty($this->data)) { 
     if ($this->Estrutura->save($this->data)) { 
      $this->Session->setFlash(__('The estrutura has been saved', true)); 
      $this->redirect(array('action' => 'admin')); 
     } else { 
      $this->Session->setFlash(__('The estrutura could not be saved. Please, try again.', true)); 
     } 
    } 
    if (empty($this->data)) { 
     $this->data = $this->Estrutura->read(null, $id); 
    } 
    $users = $this->Estrutura->User->find('list'); 
    $anos = $this->Estrutura->Ano->find('list'); 
    $estruturatipos = $this->Estrutura->Estruturatipo->find('list'); 
    $ciclos = $this->Estrutura->Ciclo->find('list'); 
    $users = $this->Estrutura->User->find('list'); 
    $this->set(compact('users', 'anos', 'estruturatipos', 'ciclos', 'users')); 
} 

以我編輯視圖我有這樣的錯誤: 通知(8):未初始化字符串偏移量:0 [CORE/cake/libs/view/helper.php,第863行]:

<?php 
    echo $this->Form->input('id'); 
    echo $this->Form->input('nome'); 
    echo $this->Form->input('nome_completo'); 
    echo $this->Form->input('user_id'); 
    echo $this->Form->input('ano_id'); 
    echo $this->Form->input('estruturatipo_id'); 
    echo $this->Form->input('ciclo_id'); 
    echo $this->Form->input('User'); //the error is here 
?> 

我有什麼問題嗎? 謝謝

+1

我看到的第一個問題是您使用兩個具有相同名稱的關係。您不需要在與屬性className關聯的關係中使用其他模型的名稱。 – raultm 2011-04-25 21:33:18

+0

我該怎麼做? – user724065 2011-04-27 15:20:52

回答

0

我沒有看到數據庫中的用戶字段。也許你正在尋找的是回聲$this->Form->input('User');刪除,並將其移動到您的窗體像這樣的頂部:

echo $this->Form->create('User'); 
0

的問題是在var $屬於關聯。我將用戶更改爲User1並驗證錯誤是否在模型中。在我的user.php中我有虛擬域,問題在於它。我必須更改爲:

function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    $this->virtualFields['nomeUser'] = sprintf('CONCAT(%s.nome, " ", %s.apelido)', $this->alias, $this->alias); 
} 

var $displayField = 'nomeUser'; 

用$ this->別名解決問題。

謝謝!