Pergunta

Eu tenho duas tabelas, páginas e postagens que estão no HABTM e unidas usando a tabela Pages_Posts.

Meu modelo de página junto com a definição do HABTM contém uma função.

class Page extends AppModel
{
   var $name = "Page";
   ......
   ......
   function callthis()
   {
     return $this->find('all');;
   }
}

Do meu controlador de postagens, estou tentando chamar isso de função ..

class PostsController extends AppController
{
    ....
    ....
    function index()
    {
      $returned = $this->Post->Page->callthis();
    }
}

Isto resulta em

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 'threadedpages' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 681]

Outra saída de depuração:

Código

        $out = null;
        if ($error) {
            trigger_error('<span style="color:Red;text-align:left"><b>' . __('SQL Error:', true) . "</b> {$this->error}</span>", E_USER_WARNING);

Contexto

$sql    =   "threadedpages"
$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 'threadedpages' at line 1"
$out    =   null

Chamadas

DboSource::showQuery() - CORE/cake/libs/model/datasources/dbo_source.php, line 681
DboSource::execute() - CORE/cake/libs/model/datasources/dbo_source.php, line 266
DboSource::fetchAll() - CORE/cake/libs/model/datasources/dbo_source.php, line 410
DboSource::query() - CORE/cake/libs/model/datasources/dbo_source.php, line 364
Model::call__() - CORE/cake/libs/model/model.php, line 502
Overloadable::__call() - CORE/cake/libs/overloadable_php5.php, line 50
AppModel::threadedpages() - [internal], line ??
PostsController::admin_index() - CORE/plugins/cakey/controllers/posts_controller.php, line 11
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83

Chamar uma função de modelo associada deve ser possível no CakePHP, certo? Se vamos fazer o checkout http://book.cakephp.org/view/1044/hasandbelongstomany-habtm, Nós podemos ver isso

$this->Recipe->Tag->find('all', array('conditions'=>array('Tag.name'=>'Dessert')));

Quando a função find () do modelo de tag pode ser chamada do controlador de receitas associadas, por que não posso chamar a função callThis () do modelo de página do controlador de postagens associadas?

Foi útil?

Solução 2

Como Stefan e Moreno apontaram, havia realmente um problema com meus relacionamentos.

De acordo com http://book.cakephp.org/view/1114/plugin-models, Se precisarmos fazer referência a um modelo no seu plug -in, precisamos incluir o nome do plug -in com o nome do modelo, separado com um ponto.

Referenciei os modelos diretamente sem o uso do plugin.model como ClassName. Obrigado a todos pelo seu tempo ..

Outras dicas

O problema é mais provável em seus relacionamentos. Aposto que se você fizer

$this->Post->Page->find('all');

Você ainda receberá erros.

Verifique se o modelo da página está carregado no pós -escasso (deve estar próximo ao topo do arquivo do controlador, antes de qualquer função):

var $uses = array('Post', 'Page');

Então você deve ser capaz de ligar

$this->Page->callthis();

Ei, eu tive o mesmo problema.

Eu adicionei o pluginname.modelName, então ele é resolvido. Portanto, adicionar um nome de plugin em frente ao modelo de plug -in é uma prática muito boa,

Obrigado, Vijay

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top