Yii Framework Forum: Mysql Id - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Mysql Id Rate Topic: -----

#1 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 21 December 2012 - 01:02 PM

Boa tarde.
Estou a finalizar a estrutura da minha aplicação e há algo que me está a dificultar.
Queria no id do recibo que aparece-se da seguinte forma.
ANOID. EX 201201

Qual seria a melhor forma de o fazer?
Cumprimentos
0

#2 User is offline   Gustavo Andrade 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 120
  • Joined: 16-August 11
  • Location:MG

Posted 22 December 2012 - 06:02 AM

Olá,


Nesse recibo, voce pode concatenar o ano atual com o campo ID.

:)
0

#3 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 22 December 2012 - 09:26 AM

Sim, isso eu sei, minha dúvida está em como.
Devo criar uma função no controlador?
Se sim como deveria ser a função?
0

#4 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 807
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 22 December 2012 - 12:27 PM

Não precisa criar função, caso queira fazer de forma rápida, se faz assim:

$id_recido = date('Y') . $model->primaryKey;


Eu recomendo adicionar essa criação concatenação no seu Model, depois de salvar o Recibo.

Exemplo:
class Recibo extends CActiveRecord {

	[...]
	
	public function beforeSave() {

        if ($this->isNewRecord) {
            $this->id_recibo = date('Y') . $this->primaryKey;
        }

        return parent::beforeSave();
    }
	
	[...]

}


Desta forma, quando um cliente ou você mesmo adicionar um novo recibo ele vai pegar o ID cadastrado, e concatena com o ano corrente e adicionar a sua tupla.

This post has been edited by Newerton: 16 January 2013 - 09:41 AM

Newerton Vargas de Araújo
0

#5 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 22 December 2012 - 03:09 PM

Obrigado, era exactamente essa a minha dúvida, pensei que teria que criar uma função no form para que antes de inserir a query concatena-se o ano ao id.
Cumprimentos e muito obrigado
0

#6 User is offline   Allan Freitas 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 38
  • Joined: 08-November 12
  • Location:Guarapari-ES - Brazil

Posted 03 January 2013 - 07:46 AM

Excelente abordagem, serve pra muitas outras situações.

View PostNewerton, on 22 December 2012 - 12:27 PM, said:

Não precisa criar função, caso queira fazer de forma rápida, se faz assim:

$
id_recido = date('Y') . $model->primaryKey;


Eu recomendo adicionar essa criação concatenação no seu Model, depois de salvar o Recibo.

Exemplo:
class Recibo extends CActiveRecord {

	[...]
	
	public function beforeSave() {

        if ($this->isNewRecord) {
            $this->id_recibo = date('Y') . $this->primaryKey;
        }

        return parent::beforeSave();
    }
	
	[...]

}


Desta forma, quando um cliente ou você mesmo adicionar um novo recibo ele vai pegar o ID cadastrado, e concatena com o ano corrente e adicionar a sua tupla.

0

#7 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 15 January 2013 - 10:08 AM

Bem após experimentar em condições verifiquei que apenas adiciona o ano no banco de dados, o id não chega a ser adicionado.
alguma ideia para resolver?
Cumprimentos
0

#8 User is offline   Adrian Lucas 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 224
  • Joined: 13-October 11
  • Location:João Pessoa - Paraíba

Posted 16 January 2013 - 06:03 AM

View Postobscuremind, on 15 January 2013 - 10:08 AM, said:

Bem após experimentar em condições verifiquei que apenas adiciona o ano no banco de dados, o id não chega a ser adicionado.
alguma ideia para resolver?
Cumprimentos


Utiliza os mesmos critério, porém na seguinte função

    public function afterSave() {
        if ($this->isNewRecord) {
            $this->id_recibo = date('Y') . $this->primaryKey;
        }
        return true();
    }



Adrian Lucas
A fé em Deus nos faz crer no incrível,
ver o invisível e realizar o impossível.

0

#9 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 16 January 2013 - 07:06 AM

Continua igual, embora na url passe o ano+id quando se clica em create, no banco de dados apenas mantém o ano.
0

#10 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 807
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 16 January 2013 - 09:42 AM

Você definiu alguma chave primaria para a tabela?
Newerton Vargas de Araújo
0

#11 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 16 January 2013 - 10:00 AM

Sim defini o id_recibo como chave primária.
Cumprimentos
0

#12 User is offline   Adrian Lucas 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 224
  • Joined: 13-October 11
  • Location:João Pessoa - Paraíba

Posted 16 January 2013 - 12:55 PM

View Postobscuremind, on 16 January 2013 - 10:00 AM, said:

Sim defini o id_recibo como chave primária.
Cumprimentos


Então faz assim

    public function beforeSave() {
        if ($this->isNewRecord) {
            $this->id_recibo = date('Y') . '' . $this->id_recibo;
        }
        return parent::beforeSave();
    }


Adrian Lucas
A fé em Deus nos faz crer no incrível,
ver o invisível e realizar o impossível.

0

#13 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 16 January 2013 - 01:15 PM

Acontece exactamente o mesmo que anteriormente.
Já tentei inclusive usar o mysql_insert_id para ir buscar o ultimo id, e incrementar 1 mas nem assim funcionou.
Cumprimentos
0

#14 User is offline   Adrian Lucas 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 224
  • Joined: 13-October 11
  • Location:João Pessoa - Paraíba

Posted 16 January 2013 - 02:13 PM

View Postobscuremind, on 16 January 2013 - 01:15 PM, said:

Acontece exactamente o mesmo que anteriormente.
Já tentei inclusive usar o mysql_insert_id para ir buscar o ultimo id, e incrementar 1 mas nem assim funcionou.
Cumprimentos


Tentou assim também? Posted Image

    public function afterSave() {
        if ($this->isNewRecord) {
            $this->id_recibo = date('Y') . '' . $this->id_recibo;
        }
        return true();
    }


Adrian Lucas
A fé em Deus nos faz crer no incrível,
ver o invisível e realizar o impossível.

0

#15 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 16 January 2013 - 02:44 PM

Acontece o mesmo, o que é estranho.
0

#16 User is offline   Adrian Lucas 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 224
  • Joined: 13-October 11
  • Location:João Pessoa - Paraíba

Posted 16 January 2013 - 02:56 PM

View Postobscuremind, on 16 January 2013 - 02:44 PM, said:

Acontece o mesmo, o que é estranho.


O que me parece o seu id_recibo é um auto_increment então a melhor forma é você criar outro campo e fazer a concatenação do ID com o ano, como o Gustavo Andrade falou acima. Tenta assim

    public function beforeSave() {
        if ($this->isNewRecord) {
            $this->numero = date('Y') . ''.$this->id_recibo;
        }
        return parent::beforeSave();
    }

Adrian Lucas
A fé em Deus nos faz crer no incrível,
ver o invisível e realizar o impossível.

0

#17 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 16 January 2013 - 03:21 PM

Já tinha tentado assim, mas mesmo assim não vai buscar o id e adicionar a bd
0

#18 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 807
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 16 January 2013 - 07:58 PM

No sei controller, você não ta usando $model->save(false)?


Veja se consegue visualizar o ID adicionado.

public function beforeSave() {
        if ($this->isNewRecord) {
            echo '<pre>';
            print_r($this->attributes);
            echo '</pre>';
            exit();
        }
        return parent::beforeSave();
    }

Newerton Vargas de Araújo
0

#19 User is offline   obscuremind 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 14-December 12

Posted 17 January 2013 - 04:40 PM

Não não estou a usar.
Gerei os forms no gii extended.

Array
(
[nome_cliente] => teste
[telefone_cliente] => 34343
[morada_cliente] => asdasdas
[marca_equipamento] => blaaa
[nr_serie] => 2132313131
[avaria] => asdasdas
[data_recb] => 2013-01-26
[data_entrega] => 2013-01-17
[garantia] => Sim
[preco] => 1231
[observacoes] => asdasda
[modelo_equipamento] => blaaa
[estado] => Recebido
[id_recibo] =>
[id_ficha] =>
)
0

#20 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 807
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 17 January 2013 - 07:53 PM

Posta seu model, acho que falta a variável na

function rules() {...array('id_recibo', 'safe')...}.

This post has been edited by Newerton: 17 January 2013 - 07:53 PM

Newerton Vargas de Araújo
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • 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