Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Aplicação está permitindo eu inserir produtos/ usuários com campos nulo

Apesar de ter criado os campos como 'not null' eu estou conseguindo adicionar produtos e usuários com campos nulos e não dá erro!

Scripts de criação das tabelas: =>Tabela PRODUTOS:

create table produtos (id int(11) not null auto_increment primary key, nome varchar(255) not null, preco decimal(10,2), descricao text not null);

=>Tabela USUÁRIOS:

create table users (id int not null primary key auto_increment, username varchar(255) not null, password varchar(255) not null);

Aí fica a dúvida... pq ele está deixando eu cadastrar com os campos nulo?

3 respostas

Segui a aula e através do método "requirePresence" em ProdutosTable ele obrigou o preenchimento do nome, porém ocorreu o seguinte:

=> a tela inicial é exibida com o seguinte erro:

Strict (2048): Declaration of App\Model\Table\ProdutosTable::validationDefault() should be compatible with Cake\ORM\Table::validationDefault(Cake\Validation\Validator $validator) [APP/Model\Table\ProdutosTable.php, line 6]

=> Ao tentar cadastrar novo produto, a tela abre com as seguintes mensagens:

Strict (2048): Declaration of App\Model\Table\ProdutosTable::validationDefault() should be compatible with Cake\ORM\Table::validationDefault(Cake\Validation\Validator $validator) [APP/Model\Table\ProdutosTable.php, line 6]
Warning (4096): Argument 1 passed to App\Model\Table\ProdutosTable::validationDefault() must be an instance of App\Model\Table\validator, instance of Cake\Validation\Validator given, called in C:\Users\Priscila\mercado\vendor\cakephp\cakephp\src\Validation\ValidatorAwareTrait.php on line 108 and defined [APP/Model\Table\ProdutosTable.php, line 9]

E agora??

Olá Priscila,

Bem estranho esse comportamento, né?

Eu rodei aqui seus Scripts e rodei também os comandos de insert que seguem abaixo, e o Mysql se comportou da maneira correta.

insert users (username, password) values (null, null);

insert produtos (nome, preco, descricao) values (null, null, null);

A resposta que foi dada pelo Mysql foi

column username cannot be null

O que me mostra que a criação das tabelas estão corretas.

O que eu aconselho você fazer é que, caso esteja fazendo os inserts diretamente de um código PHP garanta que os campos estão preenchidos com NULL.

Se eventualmente os campos estiverem preenchidos com uma String vazia, ("") o que é bem comum, ele irá conseguir inserir.

Null != ""

insert users (username, password) values ('', '');

Esse insert funcionou.

solução!

Pois é... muito estranho pq se eu tentar fazer o insert pelo mysql com algum campo obrigatório estando nullo, ele não permite! Mas ao implementar a classe do Validator ele acabou barrando o insert, então o problema acabou! Mas fiquei curiosa pra saber o motivo pelo qual o cake não respeitou a condição not null!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software