[Solucionado] Insert con campo autonumerico

Buenas tardes a todos, cómo están? Hace poco empece a utilizar Yii 2 y fui resolviendo dudas buscando con don google. Lamentablemente para la versión 2 hay poco material.

Paso a comentarles mi problema, que para uds será una pavada pero no puedo hacerlo funcionar. En la db cree una tabla "marca", uso postgresql, que tiene los siguientes campos:

id serial NOT NULL,

nombre character varying(50) NOT NULL DEFAULT ‘’::character varying,

codigo integer NOT NULL DEFAULT 0,

el campo "id" es la clave primaria y autonumérico. En el formulario pido ingresar codigo y nombre, pero al momento de dar submit, muestra lo siguiente: (en este caso codigo es 123 y nombre abc)


SQLSTATE[23502]: Not null violation: 7 ERROR: el valor null para la columna «id» viola la restricción not null

The SQL being executed was: INSERT INTO "public"."marca" ("id") VALUES (NULL)

Error Info: Array

(

    [0] => 23502

    [1] => 7

    [2] => ERROR:  el valor null para la columna «id» viola la restricción not null

)

Dejo los 3 códigos para que me comenten qué estoy haciendo mal.

Vista carga :


<?php

use yii\helpers\Html;

use yii\widgets\ActiveForm;

$this->title = 'Marcas';

?>

<h3 align="center">Nueva Marca</h3>


<?php $form = ActiveForm::begin(); ?>

    <?= $form->field($model, 'codigo')->label('Código') ?>

    <?= $form->field($model, 'nombre') ?>

    <?= Html::submitButton('Guardar') ?>

<?php ActiveForm::end(); ?>

Controlador MarcaController:


<?php

namespace app\controllers;


use Yii;

use yii\web\Controller;

use app\models\MarcaCarga;

use app\models\Marca;




class MarcaController extends Controller

{

    public function actionIndex()

    {

        return $this->render('index');

    }

    

    public function actionCarga()

    {

        $model = new MarcaCarga;


        if ($model->load(Yii::$app->request->post()) && $model->validate()) {

            // Valida los datos recibidos en $model


            $model = new Marca();


            if ($model->save()) {

                return $this->redirect(['carga']);

            } else {

                return $this->render('index', ['model' => $model,]);

            }

        } 

        else {

            // Se despliega la pagina inicial o si hay un error de validacion

            

            return $this->render('carga', ['model' => $model]);

        }

    }

    

}



Modelo MarcaCarga:


<?php


namespace app\models;


use yii\base\Model;


class MarcaCarga extends Model

{

    public $codigo;

    public $nombre;

    

    public function rules()

    {

        return [

            [['codigo', 'nombre'], 'required'],

            ['codigo', 'integer'],

        ];

    }

    

}

Modelo Marca:


<?php

namespace app\models;

use Yii;


class Marca extends \yii\db\ActiveRecord

{

   public static function tableName()

    {

        return 'public.marca';

    } 

    

    public function rules()

    {

        return [

            [['codigo'], 'integer'],

            [['nombre'], 'string', 'max' => 50]

        ];

    }

}

Buenas,

diria que sobra esta linea :




        $model = new MarcaCarga;


        if ($model->load(Yii::$app->request->post()) && $model->validate()) {

            // Valida los datos recibidos en $model


            $model = new Marca(); // aquí estas asignando un nuevo valor a $model perdiendo el valor cargado previamente por post, esta linea sobra.


            if ($model->save()) {

                return $this->redirect(['carga']);

            } else {

                return $this->render('index', ['model' => $model,]);

            }

        } 

Espero que te sirva

Muchas gracias por la ayuda, al final elimine esa linea y cambie el puntero del modelo, en lugar de apuntar a MarcaCarga, lo apunto a Marca.

Solucionado