Yii Framework Forum: [Solucionado] Insert con campo autonumerico - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Solucionado] Insert con campo autonumerico Rate Topic: -----

#1 User is offline   Piojo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 09-January 15

Posted 26 January 2015 - 02:20 PM

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

0

#2 User is offline   pana1990 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 38
  • Joined: 28-April 14

Posted 26 January 2015 - 05:43 PM

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
0

#3 User is offline   Piojo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 09-January 15

Posted 27 January 2015 - 05:00 PM

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users