CakePhp - вызывая функцию модели в HABTM
-
26-09-2019 - |
Вопрос
У меня есть две таблицы, страницы и сообщения, которые находятся в HABTM и соединены с использованием таблицы Pages_Posts.
Моя модель страницы вместе с определением HABTM содержит функцию ..
class Page extends AppModel
{
var $name = "Page";
......
......
function callthis()
{
return $this->find('all');;
}
}
От моих постов контроллера я пытаюсь вызвать эту функцию ..
class PostsController extends AppController
{
....
....
function index()
{
$returned = $this->Post->Page->callthis();
}
}
Это приводит к
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]
Дальнейший выход отладки:
Код
$out = null;
if ($error) {
trigger_error('<span style="color:Red;text-align:left"><b>' . __('SQL Error:', true) . "</b> {$this->error}</span>", E_USER_WARNING);
Контекст
$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
Вызовы
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
Вызов ассоциированной модели должна быть возможной в CakePhp вправо? Если мы оформием заказ http://book.cakep.org/view/1044/hasandbelongstomany-habtm., Мы видим, что
$this->Recipe->Tag->find('all', array('conditions'=>array('Tag.name'=>'Dessert')));
При нахождении () функции модели тегов можно вызвать из соответствующих рецептов контроллера, почему я не могу позвонить в Callthis () функцию страницы модели из соответствующих сообщений контроллера?
Решение 2
Как указал Стефан и Морено, действительно была проблема с моими отношениями.
В соответствии с http://book.cakephp.org/view/1114/plugin-models., Если нам нужно будет ссылаться на модель в вашем платене, нам нужно включить имя плагина с именем модели, разделенного точкой.
Я ссылаюсь на модели напрямую без использования плагина. Model в качестве класса. Спасибо всем за ваше время ..
Другие советы
Проблема, скорее всего, в ваших отношениях. Я betch, если вы делаете
$this->Post->Page->find('all');
Вы все равно получите ошибки.
Убедитесь, что модель страницы загружается в PostScontroller (должна быть рядом с верхней частью файла контроллера, прежде чем любые функции):
var $uses = array('Post', 'Page');
Тогда вы должны быть в состоянии просто позвонить
$this->Page->callthis();
Эй, у меня была такая же проблема.
Я добавил плагин. Modelname, то он разрешен. Так что добавление плагина перед моделью плагина очень хорошая практика,
Спасибо, Виджай