Yii - multiple records in one form submission

前端 未结 2 1663
广开言路
广开言路 2020-12-09 00:44

Does anyone know how to add multiple records using just one form in Yii? All the records belong to the same model and are of the same format.

Many thanks,

Ni

2条回答
  •  醉话见心
    2020-12-09 01:13

    Put this code in components folder under GeneralRepository.php file name.

     1, 'name' => 'John'),
         *      array('id' => 2, 'name' => 'Mark')
         * );
         * GeneralRepository::insertSeveral(User::model()->tableName(), $rows);
         * 
         * @param string $table the table that new rows will be inserted into.
         * @param array $array_columns the array of column datas array(array(name=>value,...),...) to be inserted into the table.
         * @return integer number of rows affected by the execution.
         */
        public static function insertSeveral($table, $array_columns)
        {
            $connection = Yii::app()->db;
            $sql = '';
            $params = array();
            $i = 0;
            foreach ($array_columns as $columns) {
                $names = array();
                $placeholders = array();
                foreach ($columns as $name => $value) {
                    if (!$i) {
                        $names[] = $connection->quoteColumnName($name);
                    }
                    if ($value instanceof CDbExpression) {
                        $placeholders[] = $value->expression;
                        foreach ($value->params as $n => $v)
                            $params[$n] = $v;
                    } else {
                        $placeholders[] = ':' . $name . $i;
                        $params[':' . $name . $i] = $value;
                    }
                }
                if (!$i) {
                    $sql = 'INSERT INTO ' . $connection->quoteTableName($table)
                    . ' (' . implode(', ', $names) . ') VALUES ('
                    . implode(', ', $placeholders) . ')';
                } else {
                    $sql .= ',(' . implode(', ', $placeholders) . ')';
                }
                $i++;
            }
            $command = Yii::app()->db->createCommand($sql);
            return $command->execute($params);
        }
    }
    

    And usage anywhere:

    $rows = array(
        array('id' => 1, 'name' => 'John'),
        array('id' => 2, 'name' => 'Mark')
    );
    GeneralRepository::insertSeveral(User::model()->tableName(), $rows);
    

    This just execute one query.

提交回复
热议问题