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"
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
Merci, ça valait le coup mais ça n'a pas fait l'affaire, j'ai mis à jour ma Question – Roland
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