2013-02-01 4 views
1

J'ai une table nommée testimonial. La structure de la table est la suivante.codeigniter insérer dans plusieurs tables

enter image description here

Mais le tableau ne semblent normalisée. Je voudrais quelque chose comme.

trip_testimonial

----------------------------------- 
id 
trip_id 
status 
----------------------------------- 

Et une autre table

témoignage

---------------------------------- 
    id 
    name 
    email 
    website 
    message 
    ----------------------------------- 

Mais comment puis-je entrer les données dans les dans CodeIgniter. J'ai utilisé quelque chose comme

function add($data){ 

     $this->db->insert('testimonials', $data); 
     if($this->db->affected_rows()>0){ 
      return TRUE; 
     }else{ 
      return FALSE; 
     } 
    } 

Quelle serait la meilleure approche?

+0

votre question est claire. Voulez-vous insérer dans plusieurs tables? dans trip_testimonial quel est le statut? –

+0

le statut est juste le statut pour le témoignage qui peut avoir 1 pour approuvé ou 0 pour le témoignage en attente – prakashchhetri

+1

OK Dites-moi qu'un seul témoignage peut avoir plusieurs voyages? –

Répondre

2
[TRIP] 
trip_id 
trip_name 
trip_desc 
.... 

[TESTIMONIAL] 
testimonial_id 
trip_id 
testim_name 
testim_email 
...... 

function add($data){ 

    $dataTrip = array(
    //fill the array the appropriate data 
); 

    //return the last inserted trip_id 
    $lastTripId = $this->myModel->myFuncToAddTrip($dataTrip);  

    $dataTestimonial = array(
    'trip_id' => $lastTripId, 
    'testim_name' => $data['testim_name'], 
    ....... 
); 

    if($this->myModel->myFuncAddTestimonial($dataTestimonial)){ 
    //success 
    }else{ 
    //error 
    } 

} 

Utilisez les transactions pour annuler si au moins une requête échoue.

EDIT 1 voyage à de nombreux témoignages

1

Votre structure est normalisée pour une relation biunivoque juste enlever la colonne trip_id

testimonial 
----------------------------------- 
id 
name 
email 
website 
message 
date 
status 

Votre fonction add est bien

function add($data){ 

    $this->db->insert('testimonials', $data); 
    if($this->db->affected_rows()>0){ 
     return TRUE; 
    }else{ 
     return FALSE; 
    } 
} 

et les données à insérer

$data['name']  = 'blah'; 
$data['email']  = '[email protected]'; 
$data['website'] = 'website'; 
$data['message'] = 'message'; 
$data['date']  = date('Y-m-d H:i:s'); 

Et définissez la valeur par défaut de l'état sur 0 lors de la création de la table ou avec ALTER.
Mais lorsque vous avez besoin d'insérer vous pouvez ajouter une colonne de plus avec une valeur différente.

$data['status']  = 1; 

Et maintenant, vous pouvez appeler la fonction ajouter
Lors de la sélection, vous pouvez sélectionner avec le statut

SELECT * FROM testimonial WHERE status = 0 

OU

SELECT * FROM testimonial WHERE status = 1 

MISES À JOUR:

Si tel est le cas de vous pouvez le faire comme ça. Ajouter une colonne à témoignages tableau

testimonial 
----------------------------------- 
id 
name 
email 
website 
message 
date 
status 
trip_id 

Maintenant, sélectionnez identifiant de voyage

SELECT id FROM trip_testimonial WHERE status = 0 

Et l'ID retourné doit être mis avec les données témoignage

$data['name']  = 'blah'; 
$data['email']  = '[email protected]'; 
$data['website'] = 'website'; 
$data['message'] = 'message'; 
$data['date']  = date('Y-m-d H:i:s'); 
$data['trip_id'] = $row->id; 

Et maintenant appeler votre fonction add

+0

Non, un voyage peut avoir plusieurs témoignages, donc trip_id est la clé étrangère dans trip_testimonials – prakashchhetri

+0

c'est exactement la même chose que j'ai posté. Mais ce que je veux, c'est normaliser la table comme je l'ai dit dans la question et insérer les données dans les deux tableaux à un dans le codeigniter] – prakashchhetri

Questions connexes