2011-09-28 4 views
1

J'ai une boucle foreach qui sauve un tas d'enregistrements dans une table à l'aide CakePHPSauvegarde des données en blanc dans CakePHP

foreach($interests as $id){ 
       $this->data['UserInterest']['user_id'] = $user_id; 
       $this->data['UserInterest']['interest_id'] = $id; 
       $this->data['UserInterest']['other_interest'] = $other; 
       $UserInterest = new UserInterest; 
       if(!$UserInterest->save($this->data)) { 
        $this->Session->setFlash(__l('Failed to save Interests.') , 'default', null, 'error'); 
       } 
      } 

Tous sauve bien sauf l'autre intérêt

MISE À JOUR:

I « ai fait le

suivant, je peux exho il parfaitement si je fais

$this->data['UserInterest']['other_interest'] = $other; 
echo $this->data['UserInterest']['other_interest']; 
        $UserInterest = new UserInterest; 

Mais en quelque sorte, il enregistre comme vide?

Ma mise en page de base de données ressemble à ceci

CREATE TABLE IF NOT EXISTS `users_interests` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `user_id` bigint(20) NOT NULL, 
    `interest_id` bigint(20) NOT NULL, 
    `other_interest` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) 

et mon modèle comme celui-ci

<?php 
class UserInterest extends AppModel 
{ 
    var $name = 'UserInterest'; 

    var $useTable="users_interests"; 

    //$validate set in __construct for multi-language support 
    //The Associations below have been created with all possible keys, those that are not needed can be removed 
    var $belongsTo = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '', 
     ) , 
     'Interests' => array(
      'className' => 'Interest', 
      'foreignKey' => 'interest_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '', 
     ) 
    ); 
    function __construct($id = false, $table = null, $ds = null) 
    { 
     parent::__construct($id, $table, $ds); 
     $this->validate = array(
      'user_id' => array(
       'rule' => 'numeric', 
       'allowEmpty' => false, 
       'message' => __l('Required') 
      ) 
     ); 
    } 
} 
?> 

que je fais quelque chose de mal?

MISE À JOUR:

Je ne les suivantes

$this->data['UserInterest']['user_id'] = $user_id; 
       $this->data['UserInterest']['interest_id'] = $id; 
       $this->data['UserInterest']['other_interest'] = $other; 
       echo '<pre>'; 
       var_dump($this->data['UserInterest']); 
       var_dump($other); 
       var_dump($this->data['UserInterest']['other_interest']); 

       $this->UserInterest = ClassRegistry::init('UserInterest'); 

et les résultats de var_dump où les éléments suivants, et encore il n'a pas sauvé

array(3) { 
    ["user_id"]=> 
    string(3) "659" 
    ["interest_id"]=> 
    string(2) "10" 
    ["other_interest"]=> 
    string(17) "Share Investments" 
} 
string(17) "Share Investments" 
string(17) "Share Investments" 
+2

Vous ne savez pas si cela va résoudre votre problème, mais il existe de meilleurs moyens pour initialiser votre modèle! Dans la classe de contrôleur, vous pouvez utiliser $ uses array dans la définition de classe comme ceci: $ uses = array ('UserInterest'); Certaines personnes n'aiment pas cela, car cela peut prendre beaucoup de mémoire. Dans ce cas, vous pouvez le faire à la place: $ this-> UserInterest = ClassRegistry :: init ('UserInterest'); Essayez ces choses au lieu de faire $ UserInterest = new UserInterest; et voyez si ça aide. – user470714

+0

Merci, ça valait le coup mais ça n'a pas fait l'affaire, j'ai mis à jour ma Question – Roland

+1

La chose la plus étrange, c'est que ce seul champ ne sauvera pas. La seule autre chose que je peux penser est qu'il a quelques difficultés avec ce champ en raison de ces mots-clés tels que CHARACTER SET et COLLATE que vous utilisez. Pouvez-vous recréer la table sans cela et voir si cela fonctionne? (ou ajouter un nouveau champ varchar sans aucun mot-clé) – user470714

Répondre

1

et ancien poste mais je voudrais ajouter ceci ici ....

Toujours avoir

$this->Modelname->create(); 

en boucle pour enregistrer plusieurs enregistrements avec une boucle. C'est le plus souvent le cas qui cause l'erreur.

Questions connexes