В CakePHP фатальная ошибка призыв к член функция схемы() на не-объект

у меня есть некоторые проблемы с поиском решения для этого..

Error: Call to a member function schema() on a non-object
File: /Cake/Model/Model.php
Line: 3627

В моей базе данных есть таблицы статьи,хэштеги и Ассоциация articles_hashtags С помощью foreignkeys article_id и hashtag_id .. Поэтому я пытаюсь получить информацию о том, какие хэштеги есть в каждой статье..

Моя Модель Статьи

class Article extends AppModel {
 public $hasAndBelongsToMany = array(
    'Hashtag' =>
        array(
            'className' => 'Hashtag',
            'joinTable' => 'articles_hashtags',
            'foreignKey' => 'article_id',
            'associationForeignKey' => 'hashtag_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'with' => ''
               )  
            ); 
          }

Статьи Контроллер

class ArticleController extends AppController {
var $name = 'Article';
 public $helpers = array("Html", "Form");
    public function index() 
    {
    $this->set("posts", $this->Article->find("all"));

    } 
}

спасибо за твою помощь!!

дополнительно: Если я помещаю сгенерированный запрос SQL select из журнала SQL отладчика в свою базу данных sql, я получаю правильные результаты .. значит, с контроллером что-то не так?!

3 ответов


у меня была такая же проблема, так урезанная $hasAndBelongsToMany к минимальным ключам возможным.

проблема в том, что вы используете клавишу "with" на $hasAndBelongsToMany массив. Удалите это или установите его в "articles_hashtags":

class Article extends AppModel {
  public $hasAndBelongsToMany = array(
    'Hashtag' =>
        array(
            'className' => 'Hashtag',
            'joinTable' => 'articles_hashtags',
            'foreignKey' => 'article_id',
            'associationForeignKey' => 'hashtag_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'with' => 'articles_hashtags'
        )  
      ); 
   }

код модели библиотеки пытался получить доступ к значению ключа "with", который был пустым, следовательно, ошибка без объекта.

из CakePHP docs, в отношении $hasAndBelongsToMany время:

  • С: определяет имя модели для таблицы соединений. По умолчанию CakePHP автоматически создаст для вас модель. Используя пример выше это назвали бы IngredientsRecipe. С помощью этого ключа можно переопределить имя по умолчанию. Модель таблицы соединений может использоваться так же, как и любая "обычная" модель для прямого доступа к таблице соединений. Создав класс модели с таким именем и именем файла, можно добавить любое пользовательское поведение к поиску в таблице соединений, например добавление дополнительных информация / столбцы к нему.

вы инициализировали объект model статьи в геймпаде? Вы можете сделать это с помощью поля $использует в контроллер. Добавьте следующую строку в ArticleController:

public $uses = array('Article');

имена контроллеров множественное число

вам не нужно объявлять модельную статью в ArticlesController, магия торта делает это за вас.