[Resolvido] Problemas Com Um For

Boa tarde

estou tentando gravar várias linhas de dados em uma tabela do BD, mas somente é gravado a ultima linha da repetição. Acredito que o problema esteja na instrução FOR, mas não estou conseguindo achar o erro





            public function actionAddItemPgto(){


                $model = new Sysos();

                $itensPgto = new Pagamentos();

                

                // Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

                if(isset($_POST['Pagamentos'])){

                    

                   

                    

                   for ($i = 1; $i <= $_POST['Pagamentos']['parcelas']; $i++) {

                        $itensPgto->idsysos = $_POST['Pagamentos']['idsysos'];

                        $itensPgto->descricao = $_POST['Pagamentos']['descricao'];

                        $itensPgto->vencimento =  date('Y/m/d', strtotime("+30 days",strtotime($_POST['Pagamentos']['vencimento'])));

                        $itensPgto->pagamento = $_POST['Pagamentos']['pagamento'];

                        $itensPgto->parcelas = $i . '/' . $_POST['Pagamentos']['parcelas'];

                        $itensPgto->idbanco = $_POST['Pagamentos']['idbanco'];

                        $itensPgto->cheque = $_POST['Pagamentos']['cheque'];

                        $itensPgto->valor = $_POST['Pagamentos']['valor'] / $_POST['Pagamentos']['parcelas'];

                        $itensPgto->save();


                     //  $rel = new RelPgto();

                     //  $rel->idsysos = $_POST['Pagamentos']['idsysos'];  

                       

                      // $rel->idpgto =  $this->last_itemPgto($_POST['Pagamentos']['idsysos']);

                     //  $rel->save();   


                   }

                }


            }




Jjunior,

Qual o valor que está enviando para $_POST[‘Pagamentos’][‘parcelas’]?

Vou postar um modelo de for, para você debugar se está ocorrendo erros de validação.


for ($i = 1; $i <= $_POST['Pagamentos']['parcelas']; $i++) {

	$itensPgto->idsysos = $_POST['Pagamentos']['idsysos'];

	$itensPgto->descricao = $_POST['Pagamentos']['descricao'];

	$itensPgto->vencimento =  date('Y/m/d', strtotime("+30 days",strtotime($_POST['Pagamentos']['vencimento'])));

	$itensPgto->pagamento = $_POST['Pagamentos']['pagamento'];

	$itensPgto->parcelas = $i . '/' . $_POST['Pagamentos']['parcelas'];

	$itensPgto->idbanco = $_POST['Pagamentos']['idbanco'];

	$itensPgto->cheque = $_POST['Pagamentos']['cheque'];

	$itensPgto->valor = $_POST['Pagamentos']['valor'] / $_POST['Pagamentos']['parcelas'];

	echo CActiveForm::validate($itensPgto);

	//if($itensPgto->validate())

		//$itensPgto->save();

}

Yii::app()->end();

Júnior, adicione a linha abaixo logo no início do for:


$itensPgto = new Pagamentos();

Antes dessa:


$itensPgto->idsysos = $_POST['Pagamentos']['idsysos'];

O método save() atualiza o registro se o modelo não for novo, olha:


	public function save($runValidation=true,$attributes=null)

	{

		if(!$runValidation || $this->validate($attributes))

			return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);

		else

			return false;

	}

#Edit

Se preferir, podes usar a função setIsNewRecord(), ao invés de instanciar o modelo novamente., assim:


$itensPgto->setIsNewRecord(true);

Newerton o valor que esta sendo enviado é um valor numérico. Que é digitado pelo usuário. Número de parcelas para efetuar o serviço.

Lothor, setisnewrecord() não funcionou, mas instanciando a variável novamente funcionou corretamente.

Obrigado a todos