Mise à jour par lot avec CodeIgniter
Je suis en train de faire un petit open CMS avec CodeIgniter et je suis en train de travailler sur le système de catégories.
Je suis vraiment coincé avec ça et après beaucoup d'essais et les post sur le forum je n'ai pas le résoudre.
J'ai 2 TABLES mySQL
- #1 : ft_categories (liste de toutes les catégories de noms avec 2 champs :
category_name et id) - #2 : ft_upload_data (liste de tous les postes avec des champs comme id, titre, catégorie,
date et ainsi de suite)
Je veux mettre à JOUR mon #1 TABLE avec les données dans une édition categorie des noms de la forme (ce formulaire est rempli avec des entrées dans une boucle pour modifier plusieurs catégories à la fois)
Ici, il est :
if ($result != NULL) {
echo form_open('admin/update_categories/');
if (isset($result) && $result != NULL) {
foreach ($result as $row) {
echo form_input('category_name[]' ,$row->category_name);
echo anchor("admin/delete_category/$row->category_name", 'Delete category');
echo '<br /><br />';
}
echo '<br /><br />';
echo form_submit('','Save');
echo form_close();
} } else { echo 'NO categories'; }
C'est le formulaire avec les données récupérées à partir de la DB, où vous pouvez éditer le nom.
Ok maintenant, lorsque vous modifiez la categorie de noms que vous allez à 'update_categories' CONTRÔLEUR pour faire la demande de mise à JOUR
function update_categories(){
$i = 0;
foreach ($this->input->post('category_name') as $cat)
$data[$i++]['category_name'] = $cat;
//The $i++ creates a multi-dimensional array to insert
//multiple rows into the DB.
$this->admin_model->update_categories($data);
}
Cette obtiendrez les multiples entrées de champs à mettre à JOUR la DB.
Et maintenant, je vais le MODÈLE pour mettre à JOUR les données dans la DB et VOICI LE PROBLÈME :
function update_categories($data) {
?
Je ne sais pas ce que je peux faire pour mettre à jour les noms correctement avec quelque chose comme un insert_batch mais avec la mise à JOUR, car bien que j'ai besoin de mettre à JOUR la TABLE #1, j'ai également BESOIN de mettre à jour le nom du champ dans la TABLE #2
Double mise à JOUR sur les 2 Tableaux et 1 lot de mise à JOUR dans le TABLEAU n ° 1
Évidemment j'ai essayé d'ajouter un de plus : TABLEAU #3 qui obtient le TABLEAU#1 id de champ et la correspondance avec le TABLEAU#2 id de champ, mais je ne peux pas le comprendre, à faire la connexion entre les 3 tableaux.
Toute aide serait très très apprécié! Merci beaucoup!! (désolé pour mon mauvais anglais)
Merci pour la réponse!
Ok j'ai cette troisième table maintenant, je voudrais récupérer le 'category_name' pour montrer ce à l'intérieur de la 'post'
J'ai ceci :
$this->db->order_by('rank', 'asc');
$this->db->select('*');
$this->db->from('ft_upload_data');
$this->db->join('ft_categories', 'assigned_categories.ft_categories_id = assigned_categories.ft_upload_data_id');
$query = $this->db->get();
return $query->result();
Mais il dit qu'il est Inconnu de la colonne 'assigned_categories.ft_categories_id' dans 'clause'
(assigned_categories est mon troisième TABLE avec l'id de la poste et de l'id de la catégorie de correspondance)
Une idée?
$data[]='';
OriginalL'auteur ludovic | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
essayez d'utiliser
UPDATE_BATCH
Le premier paramètre contient le nom de la table, le deuxième est un tableau associatif des valeurs, le troisième paramètre est le clé où.
espérons que cette aide........................
veuillez voir ma mise à jour et de vérifier la doc .. ellislab.com/codeigniter/user-guide/database/active_record.html
Comment ajouter plusieurs où en sont les conditions? Ne
$this->db->where()
fonctionne pour update_batch?stackoverflow.com/questions/9751984/...
stackoverflow.com/questions/9569857/...
OriginalL'auteur Kanishka Panamaldeniya
D'abord vous ne pouvez pas mettre à jour plusieurs lignes dans une même requête, donc il n'y a rien comme insert_batch() pour les mises à jour - vous devez le faire dans une boucle pour chaque ligne. Ensuite, vous devez utiliser la 3ème table d'après le lien avec l'identifiant id de la catégorie dans une relation un à plusieurs à l'aide de clés étrangères (InnoDB, pire performance) OU au moins utiliser category_id champ dans le TABLEAU n ° 2 que les liens vers l'id de la catégorie, de sorte que vous n'avez pas besoin de mettre à jour ce tableau en cas de modifications dans le TABLEAU n ° 1.
OriginalL'auteur Jarek Tkaczyk