Pregunta

Tengo dos tablas, páginas y mensajes que se encuentran en HABTM y se unen utilizando pages_posts tabla de unión.

Modelo Mi página junto con la definición HABTM contiene una función ..

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

Desde mi controlador de mensajes, estoy tratando de llamar a esa función ..

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

Este resultados en

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]

Además de salida de depuración:

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

Las llamadas

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

Llamar a una función de modelo asociado debería ser posible en CakePHP ¿verdad? Si hemos de pagar http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM , podemos ver que

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

Cuando find () función del modelo de etiqueta se puede llamar desde el controlador Recetas asociado, por qué no puedo llamar callthis () función del modelo de página en el controlador de mensajes asociados?

¿Fue útil?

Solución 2

Como Stefan y Moreno destacaron, efectivamente se ha producido un problema con mis relaciones.

De acuerdo con http://book.cakephp.org/view/1114/Plugin -Modelos , si tenemos que hacer referencia a un modelo dentro de su plugin, es necesario incluir el nombre del plugin con el nombre del modelo, separados por un punto.

I hace referencia a los modelos directamente sin utilizar Plugin.Model como className. Gracias a todos por su tiempo ..

Otros consejos

Es muy probable que el problema en sus relaciones. Me betch si lo hace

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

todavía tendrá errores.

Asegúrese de que el modelo de página se carga en el PostsController (debe estar cerca de la parte superior del archivo de controlador, antes de cualquier función):

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

A continuación, debería ser capaz de simplemente llamada

$this->Page->callthis();

Hola que tenía el mismo problema.

He añadido el PluginName.ModelName, a continuación, que se resuelva. Por lo que añadir un PluginName frente al modelo plugin es muy buena práctica,

Gracias, Vijay

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top