Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou com um problema muito bizarro que não consegui entender.
Em um dos meus models, eu precisei criar uma função para executar uma query minha.
então eu criei a seguinte função dentro do model:
public function pegarPermissoes($id){
return $this->query('SQL AQUI');
}
mas quando chamo essa função no controlador ($this->ModelName->pegarPermissoes($id);), ele me retorna o seguinte erro:
Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pegarPermissoes' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 684]
Query: pegarPermissoes
Ele está acusando de tentar rodar uma SQL com o comando 'pegarPermissoes', mas o SQL que eu executo dentro da função é um "SELECT * FROM...."
Não estou entendendo esse erro bizarro....
Alguém poderia me dar uma luz?
>
É possível que isto esteja acontecendo porque a sua model não está instanciada.
Tente adicioná-la no $uses ou fazer um $this->loadModel('ModelName');
Dica: Evite criar querys manualmente, utilize sempre o find. O CakePHP faz praticamente qualquer tipo de query, com joins e etc.
http://book.cakephp....-Busca-Complexa
Eu pretendo converter a query usando o find :) mas por agora usei o query() pq era mais rápido.
O modelo que eu estou usando está relacionado com outro modelo, então eu estou usando da seguinte forma:
$this->ModeloA->ModeloB->funcao();
e é aí que está dando o erro... eu vou tentar fazer o que você falou, pra ver no que dá.
Valeu :)
>
Eu pretendo converter a query usando o find :) mas por agora usei o query() pq era mais rápido.
O modelo que eu estou usando está relacionado com outro modelo, então eu estou usando da seguinte forma:
Não quero parecer hostil. Mas não faça XGH.
Não faça o mais rápido, faça o que fica melhor logo na primeira vez.
>
$this->ModeloA->ModeloB->funcao();
Não tenho certeza, mas acredito que se seu ModelB for de alguma tabela hasManyAndBelongsToMany, não vai funcionar assim.
Você teria que declarar no $uses sua ModelB e fazer o contrário.
$this->ModeloB->ModeloA->funcao();
Até mais
>
>
Eu pretendo converter a query usando o find :) mas por agora usei o query() pq era mais rápido.
O modelo que eu estou usando está relacionado com outro modelo, então eu estou usando da seguinte forma:
Não quero parecer hostil. Mas não faça XGH.
Não faça o mais rápido, faça o que fica melhor logo na primeira vez.
>
$this->ModeloA->ModeloB->funcao();
Não tenho certeza, mas acredito que se seu ModelB for de alguma tabela hasManyAndBelongsToMany, não vai funcionar assim.
Você teria que declarar no $uses sua ModelB e fazer o contrário.
$this->ModeloB->ModeloA->funcao();
Até mais
Eu tentei do seu jeito mas deu o mesmo problema. Eu instanciei o modelo e usei $this->ModeloA->funcao(), mas deu o mesmo erro =/
>
Eu tentei do seu jeito mas deu o mesmo problema. Eu instanciei o modelo e usei $this->ModeloA->funcao(), mas deu o mesmo erro =/
Verifique bem o nome dos arquivo do model e o nome da classe model para garantir que não há erros.
Se sua tabela se chama "clientes", o arquivo do model deve se chamar "cliente.php" e a classe "Cliente".
Assim no controller você declara $uses = array('Cliente');
Tente declarar apenas essa model que você está tentando usar, só para verificar se funciona.
>
>
Eu tentei do seu jeito mas deu o mesmo problema. Eu instanciei o modelo e usei $this->ModeloA->funcao(), mas deu o mesmo erro =/
Verifique bem o nome dos arquivo do model e o nome da classe model para garantir que não há erros.
Se sua tabela se chama "clientes", o arquivo do model deve se chamar "cliente.php" e a classe "Cliente".
Assim no controller você declara $uses = array('Cliente');
Tente declarar apenas essa model que você está tentando usar, só para verificar se funciona.
O modelo está correto, eu consigo pegar os relacionamentos, usar o find, read, save... só tenho problemas com métodos definidos por mim.
O modelo está da seguinte forma:
class Fulano extends AppModel {
var $name = 'Fulano';
var $displayField = 'alias';
var $validate = array();
public function pegarPermissoes($id){
return $this->query("SELECT * FROM tabela WHERE id = $id");
}
}
Se eu faço
$this->Fulano->pegarPermissoes(1);
Ele retorna aquele erro lá encima:
[color=#202020][font=tahoma, sans-serif][size=2]Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pegarPermissoes' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 684][/size][/font][/color][color=#202020][font=tahoma, sans-serif][size=2]
[/size][/font][/color]
[color=#202020][font=tahoma, sans-serif][size=2]Query: pegarPermissoes[/size][/font][/color]
>
O modelo está correto, eu consigo pegar os relacionamentos, usar o find, read, save... só tenho problemas com métodos definidos por mim.
Pois é, os métodos do Cake vão funcionar mesmo.
Ele não depende de você criar um arquivo para você ter um model.
Ele faz um tipo de "metaprogramação" que instancia uma classe e cria um objeto sem o arquivo.
Por isso acredito que tenha alguma coisa errada com o nome ou algum outro model.
Tente declarar apenas essa model que você está tentando usar, só para verificar se funciona.
Essa query sua pode ser facilmente criada com o find:
$conditions = array('Fulano.id' => $id);
$this->Fulano->find('first', compact('conditions'));>
>
O modelo está correto, eu consigo pegar os relacionamentos, usar o find, read, save... só tenho problemas com métodos definidos por mim.
Pois é, os métodos do Cake vão funcionar mesmo.
Ele não depende de você criar um arquivo para você ter um model.
Ele faz um tipo de "metaprogramação" que instancia uma classe e cria um objeto sem o arquivo.
Por isso acredito que tenha alguma coisa errada com o nome ou algum outro model.
Tente declarar apenas essa model que você está tentando usar, só para verificar se funciona.
Essa query sua pode ser facilmente criada com o find:
$conditions = array('Fulano.id' => $id);
$this->Fulano->find('first', compact('conditions'));
O modelo está correto como todos os outros modelos que eu tenho, criados pelo Bake.
E eu sei que eu posso usar o metodo find, inclusive já até troquei, mas agora quero saber por que minhas funções proprias no modelo não funcionam, por isso insisto nesse problema.
Não é normal isso ocorrer. O nome do arquivo, da classe, está tudo correto...
E a query que eu coloquei foi só um ''Lorem Ipsum"
Como eu disse, se tiver alguma coisa errada com seu Model, os métodos padrões do Cake vão funcionar assim mesmo.
Pode ser algum conflito entre suas models, não tem como eu saber sem ver como você realmente está fazendo.
Você tentou declarar apenas essa model que você está tentando usar(só para testar)?
Cria um controller qualquer ai e tente declarar apenas essa model.
Se não der certo.
Escreva como você realmente está tentando fazer.
É possível que isto esteja acontecendo porque a sua model não está instanciada.
Tente adicioná-la no $uses ou fazer um $this->loadModel('ModelName');
Dica: Evite criar querys manualmente, utilize sempre o find. O CakePHP faz praticamente qualquer tipo de query, com joins e etc.
http://book.cakephp.org/pt/view/1030/Condi%C3%A7%C3%B5es-de-Busca-Complexa