Bonjour,
Je veux sauvegarder plusieurs local (langues) dans la Basse de donnée. CakePhp panique car je luis demande de sauvegarder un tableau. Il m'affiche une erreur suivante :
Database Error
SQL Query: INSERT INTO radio
.r\_tracks
(name
, slug
, album
, description
, sc
, created
) VALUES ('teste', 'sss', 'sss', Array, '123', '2014-05-07 21:33:09')
Pour forcer Cakephp à savegarder la local Fra et Eng j'utilise la fonction local :
$this->Track->locale = Configure::read('Config.languages');
Voici le débug des données.
Track' => array(
'id' => '',
'name' => 'Escape',
'slug' => 'escape',
'album' => 'teste',
'description' => array(
'fra' => 'Je suis français',
'eng' => 'I'm english'
),
'sc' => '123'
)
Merci de votre aide.
J'ai désactiver les règle de validations et sa fonctionne étrange....
ben serialize au moment de sauvegarder, et unserialize quand tu récupères !
http://www.php.net/manual/en/function.serialize.php
if($this->Track->save(serialize($this->request->data),true)){
}
Je regarde dans ma Basse de donnée il les donnée ne se sont pas enregistré.
Ca n'a rien a voir.
Je ne connais pas cake, donc je peux pas t'aider pour l'enregistrement, mais serialize retourne une chaine de caractère, donc peut etre enregistré en bdd.
En l'occurence, ton Track ressemble a ceci:
$Track = array(
'id' => '',
'name' => 'Escape',
'slug' => 'escape',
'album' => 'teste',
'description' => array(
'fra' => 'Je suis francais',
'eng' => 'I\'m english'
),
'sc' => '123'
);
$Track_S = serialize($Track);
echo $Track_S . "<br /><br />";
print_r(unserialize($Track_S));
Pour ce qui est de l'enreigstrement tu te foires ailleurs, mais je peux pas te dire ou.
Ce qu'il te faut ici c'est comme l'a dit @Vallyan, serializer les donnes de ton tableau description.
Supposons que tu ai le tableau suivant :
// Contenu de $this->request->data
Track' =>
'id' => '',
'name' => 'Escape',
'slug' => 'escape',
'album' => 'teste',
'description' =>
'fra' => 'Je suis français',
'eng' => 'I'm english'
],
'sc' => '123'
]
tout ce que tu as a faire c'est serializer le tableau de description avant insertion dans la base :
$data = $this->request->data;
$data'Track']'description'] = serialize($data'Track']'description']);
if($this->Track->save( $data, true ))
{
// code apres sauvegarde
}
Enfin pour recuperer le tout, il suffit de faire :
$track = $this->Track->find('first',
'conditions' => 'id' => 1]
]);
$descriptions = unserialize( $track'Track']'description'] ); // Retourne un tableau
Dans ma table r_i18n (la table de traduction) j'ai deux enregistrement avec la local fra. Le résultat que je veux avoir c'est deux enregistrements une en eng et une en fra qui contient le contenu en français pour la local fra et le contenu en anglais pour la local eng. Dans le tutoriel de grafikart ça fonctionne sans que je suis obligé d'utiliser la fonction serialize()
C'est pourtant pas compliqué ...
track\_desc
, et aurait les champs id
, fr
et en
.r\_tracks
une avec une desc en fr et un avec un desc en anglais <u>n'est pas une bonne méthode</u> puisque tu te retrouves a dupliquer toutes les autres valeurs. S'il y en a a changer par la suite c'est source d'erreursJ'ai peut-être trouver une solution : http://book.cakephp.org/2.0/fr/core-libraries/behaviors/translate.html
Voici la solution que j'ai trouver à mon problème :
http://fr.openclassrooms.com/forum/sujet/cakephp-2-internationalisation