php - Codeigniter 插入多对多连接表/数据透视表

标签 php mysql codeigniter many-to-many

如果之前已经回答过这个问题,我深表歉意(如果有人能指出我,我将不胜感激),但是我将如何插入到多对多连接表中?

本质上,我有一个基于体育赛事的比赛,因此有一个连接表来将 racing_id 与相关的 sports_events_id 相匹配。如果我要创建一个新的竞赛,我将如何同时插入到连接表数据库中?

或者,我是否必须先创建比赛才能获取contest_id,然后(并且只有在那时)将所有相关的sports_events_id 插入到连接表中?

感谢您提供的任何帮助和建议。

非常感谢。

解决方案

好的,我现在有以下解决方案可以插入到连接表中

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);
}

型号

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();
}

现在的问题是,如果我有多个 sports_events_id 或 post('game'),我现在如何循环 $data2?

再一次,如果您能指出我正确的方向,我将不胜感激。

最佳答案

要回答您的问题,您需要首先插入到父表中,然后使用父表 ID 作为从属表中的外键引用插入到从属表中。

您实际上暗示的是交易。数据库事务允许您以原子方式插入、更新、删除不同表中的行:要么它们全部工作并提交,要么如果其中一个失败,它们全部回滚,以便您保持数据完整性。

CodeIgniter 支持 transactions .

关于php - Codeigniter 插入多对多连接表/数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815613/

相关文章:

mysql - 注册后发送激活码

php - 无法加载动态库/usr/lib64/php/modules/php_soap.dll

PHP 提供的 jQuery UI 组件不起作用?

php - 通知: Undefined index: name

PHP:防止用户获得相同的递增ID

php - 通过 ajax 将表格行作为 HTML 代码返回并添加到表格中

java - 如何用 Java 将服务器与游戏启动器互连?

sql - 如何使用mysql中的动态值设置触发器?

php - SQL错误: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax

php - fatal error : Uncaught Error: Call to undefined function mysql_pconnect()