2016-04-23 12 views
0

Ich entschuldige mich, wenn dies zuvor beantwortet wurde (und würde es sehr schätzen, wenn jemand mich darauf hinweisen könnte), aber wie würde ich in eine viel- zu-viele Join-Tabelle?Codeigniter Einfügen in Viele-zu-Viele Joining Table/Pivot Table

Im Wesentlichen habe ich einen Wettbewerb basierend auf Sportveranstaltungen, und daher haben Sie eine Join-Tabelle, um die contest_id mit der entsprechenden sports_events_id übereinstimmen. Wenn ich einen neuen Wettbewerb erstellen würde, wie würde ich auch gleichzeitig in die Join-Tabellendatenbank einfügen?

Oder müsste ich zuerst den Wettbewerb erstellen, um die contest_id zu erhalten, und dann (und nur dann) alle relevanten sports_events_id in die Beitrittstabelle einfügen?

Ich schätze jede Hilfe und Beratung, die Sie zur Verfügung stellen könnten.

Vielen Dank.

Lösung

Ok, so muss ich jetzt die folgende Lösung in die Verbindungstabelle

-Controller

function add() 
    { 
     $this->form_validation->set_rules('contest_name', 'Contest Name', 'required|trim|xss_clean'); 

     if ($this->form_validation->run() == FALSE) { 

      $data['view_file'] = 'add_contest'; 
      $this->load->module('template'); 
      $this->template->cmslayout($data); 

     } else { 

      $data1 = array(
       'contest_name' => $this->input->post('contest_name'), 
      ); 

      $data2 = $this->input->post('game'); 

      if ($this->_transactions_new_contest($data1, $data2)) { 
       return $query; 
      } 
      redirect('/contests/'); 
     } 
    } 

function _transactions_new_contest($data1, $data2) { 
    $this->load->model('mdl_contests'); 
    $this->mdl_contests->_transactions_new_contest($data1, $data2); 
} 

Modell

function _transactions_new_contest($data1, $data2){ 
    $this->db->trans_start(); 
    $this->db->insert('contests', $data1); 
    $contest_id = $this->db->query('SELECT contests.id FROM contests ORDER BY contests.id DESC limit 1'); 
    foreach ($contest_id->result() as $row) { 
     $contest_result_id = $row->id; 
     $this->db->query('INSERT INTO contests_has_sports_events (contests_id, sports_events_id) VALUES (' . $contest_result_id . ', ' . $data2 . ')'); 
    } 
    $this->db->trans_complete(); 
} 
einfügen

Nun ist das Problem, wie schleife ich jetzt die $ data2, wenn ich mehrere sports_events_id oder post ('Spiel') habe?

Noch einmal, wenn Sie mich in die richtige Richtung zeigen könnten, würde es sehr geschätzt werden.

+0

Meinst du eine Pivot-Tabelle nach Join-Tabelle? Wenn Sie dies tun, brauchen Sie in diesem speziellen Fall keine Pivot-Tabelle. Verwenden Sie nur Fremdschlüssel. – Corona

+0

Ja, natürlich. Das hat mich total vermisst. Wäre das einfach wie eine foreach-Schleife, wo jeder eingegebene Eintrag (innerhalb des gleichen Wettbewerbs) eine andere ID und eine andere sports_events_id hätte, aber dieselbe ausländische Constraint-ID? Leistungsmäßig, was wäre mehr zu empfehlen? –

Antwort

1

Um Ihre Frage zu beantworten, müssten Sie zuerst in übergeordnete Tabellen einfügen und dann in abhängige Tabellen einfügen, indem Sie die übergeordnete Tabellen-ID als Fremdschlüsselreferenz in der abhängigen Tabelle verwenden.

Was Sie eigentlich anding sind Transaktionen. Mit einer Datenbanktransaktion können Sie Zeilen in verschiedenen Tabellen atomar einfügen, aktualisieren oder löschen: Entweder funktionieren alle und werden festgeschrieben, oder wenn ein Fehler auftritt, werden alle Rollbacks ausgeführt, sodass Sie die Datenintegrität beibehalten.

CodeIgniter unterstützt transactions.

+0

Ahh ausgezeichnet, danke für die Antwort. Genau das brauche ich. Würden die Abfragen, die ich in die Transaktionen eingegeben habe, in der Reihenfolge geschehen, in der ich sie eingegeben habe, oder müsste dies anders gehandhabt werden? –

+0

@ RyanN.Sie schreiben Ihre Abfragen in der Reihenfolge, in der sie im Transaktionsblock ausgeführt werden sollen. – Wolf

+0

Danke Kumpel. Du warst sehr hilfreich! –