2012-08-03 29 views
0

Bonjour à tous Je suis en train de créer une page d'enregistrement où une personne crée un compte, puis crée un utilisateur. Le compte peut avoir plusieurs utilisateurs et un utilisateur peut avoir 0 ou 1 comptes. Le problème que je reçois avec mon code actuel est que account_id isnt chargement à partir d'une boîte de sélectionHABTM cakephp et enregistrement

l'utilisateur peut avoir 0 ou 1 compte du compte ont 1 ou plusieurs utilisateurs

mon schéma de table est

utilisateurs - id, username, firstname, lastname comptes - id, companyname accounts_users - id, account_id, user_id

modèle des comptes

<?php 

class Account extends AppModel{ 

    var $name='Account'; 
    public $useTable = 'accounts'; 
    public $primaryKey = 'id'; 
    var $hasAndBelongsToMany = array(
     'User' => 
      array(
       'className'=>'User', 
       ) 
      ); 

utilisateurs modèle

class User extends AppModel{ 

     public $name = 'User'; 
     public $useTable = 'users'; 
     public $primaryKey = 'id'; 
     var $hasAndBelongsToMany = array(
      'Account' => 
       array(
        'className'=>'Account', 
        'joinTable'=>'accounts_users' 
        )); 

fonction add est le contrôleur des comptes

function add(){ 
     $this->set('title_for_layout', 'Account registration'); 
     $this->set('stylesheet_used', 'style'); 
     $this->set('image_used', 'eBOXLogo.jpg'); 

     if($this->request->is('post')){ 
      $this->Account->create(); 
      if ($this->Account->save($this->request->data)){ 
       $this->Session->setFlash('The user has been saved'); 
       $this->redirect(array('controller' => 'Users','action' => 'addAdmin')); 
      } 
      else{ 
       $this->Session->setFlash('The business could not be saved. Please, try again.'); 
       } 
     } 
     } 

la fonction des utilisateurs

function addAdmin(){ 
    $this->set('title_for_layout', 'Please Login'); 
    $this->set('stylesheet_used', 'style'); 
    $this->set('image_used', 'eBOXLogo.jpg'); 
if($this->request->is('post')){ 
$this->User->create(); 
$this->set('accounts', $this->User->Account->find('list')); 
if ($this->User->save($this->request->data)) 
{ 
    $this->Session->setFlash('The user has been saved'); 
    $this->redirect(array('controller'=>'Users','action' => 'login')); 
} 
else { $this->Session->setFlash('The user could not be saved. Please, try again.'); } 
} 

}

le formulaire de addAdmin

<h2>Welcome please add your Administrator Details</h2> 
<?php 
echo $this->Form->create('User', array('action'=>'add')); 
echo $this->Form->input('Account'); 
echo $this->Form->input('username',array('label'=>'Username: ')); 
echo $this->Form->input('password',array('label'=>'Password: ')); 
echo $this->Form->input('password_confirmation',array('type'=>'password')); 
echo $this->Form->input('email',array('label'=>'Email: ')); 
echo $this->Form->input('title',array('label'=>'Title: ')); 
echo $this->Form->input('firstname',array('label'=>'First Name: ')); 
echo $this->Form->input('surname',array('label'=>'Surname: ')); 
echo $this->Form->input('street',array('label'=>'Street Address: ')); 
echo $this->Form->input('city',array('label'=>'City: ')); 
echo $this->Form->input('state',array('label'=>'State: ')); 
echo $this->Form->input('country',array('label'=>'Country: ')); 
echo $this->Form->input('access_level', array('default' => 2)); 
echo $this->Form->end('Add Administrator'); 

?> 
+0

"account_id ne charge pas à partir d'une zone de sélection" pourriez-vous décrire exactement ce qui se passe. –

Répondre

1

Comme je l'ai indiqué dans les commentaires, l'erreur n'est pas clairement décrite. Voici une première réponse, je vais mettre à jour/corriger si la réponse doit être mise à jour.

L'erreur peut être dans le contrôleur:

function addAdmin(){ 
$this->set('title_for_layout', 'Please Login'); 
$this->set('stylesheet_used', 'style'); 
$this->set('image_used', 'eBOXLogo.jpg'); 

if($this->request->is('post')){ 
$this->User->create(); 
$this->set('accounts', $this->User->Account->find('list'));//this line is wrong 
if ($this->User->save($this->request->data)) 
{ 
    $this->Session->setFlash('The user has been saved'); 
    $this->redirect(array('controller'=>'Users','action' => 'login')); 
} 
else { $this->Session->setFlash('The user could not be saved. Please, try again.'); } 
} 

La fonction set est pas toujours appelé comme caché derrière un si. Essayez:

function addAdmin(){ 
$this->set('title_for_layout', 'Please Login'); 
$this->set('stylesheet_used', 'style'); 
$this->set('image_used', 'eBOXLogo.jpg'); 
$this->set('accounts', $this->User->Account->find('list'));//moved 

if($this->request->is('post')){ 
$this->User->create(); 
if ($this->User->save($this->request->data)) 
{ 
    $this->Session->setFlash('The user has been saved'); 
    $this->redirect(array('controller'=>'Users','action' => 'login')); 
} 
else { $this->Session->setFlash('The user could not be saved. Please, try again.'); } 
} 
+0

génial! corrigé mon problème cependant est-il possible de charger l'entreprise 'abn? – user1393064