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