CakePhp: проблема с моделью и именем таблицы

У меня есть StatsController.php с

class StatsController extends AppController {
    public function edit($id = null) {
        var_dump($this->Stat);
    }
}

У меня есть StatModel.php с

class Stat extends AppModel {
    public $useTable = 'tips';
    // ....
}

Когда я пытаюсь сохранить свои данные, моя первоначальная ошибка:

Отсутствует таблица базы данных | Ошибка: таблица статистики для модели Stat не найдена в источнике данных по умолчанию.

Что я делаю не так, спасибо.

Вот var_dump:

object(AppModel)[26]
  public 'useDbConfig' => string 'default' (length=7)
  public 'useTable' => string 'stats' (length=5)
  public 'id' => null
  public 'data' => 
    array (size=0)
      empty
  public 'schemaName' => null
  public 'table' => string 'stats' (length=5)
  public 'primaryKey' => string 'id' (length=2)
  protected '_schema' => null
  public 'validate' => 
    array (size=0)
      empty
  public 'validationErrors' => 
    array (size=0)
      empty
  public 'validationDomain' => null
  public 'plugin' => null
  public 'name' => string 'Stat' (length=4)
  public 'alias' => string 'Stat' (length=4)
  public 'tableToModel' => 
    array (size=1)
      'stats' => string 'Stat' (length=4)
  public 'cacheQueries' => boolean false
  public 'belongsTo' => 
    array (size=0)
      empty
  public 'hasOne' => 
    array (size=0)
      empty
  public 'hasMany' => 
    array (size=0)
      empty
  public 'hasAndBelongsToMany' => 
    array (size=0)
      empty
  public 'actsAs' => null
  public 'Behaviors' => 
    object(BehaviorCollection)[27]
      public 'modelName' => string 'Stat' (length=4)
      protected '_methods' => 
        array (size=0)
          empty
      protected '_mappedMethods' => 
        array (size=0)
          empty
      protected '_enabled' => 
        array (size=0)
          empty
      protected '_loaded' => 
        array (size=0)
          empty
      public 'defaultPriority' => int 10
  public 'whitelist' => 
    array (size=0)
      empty
  public 'cacheSources' => boolean true
  public 'findQueryType' => null
  public 'recursive' => int 1
  public 'order' => null
  public 'virtualFields' => 
    array (size=0)
      empty
  protected '_associationKeys' => 
    array (size=4)
      'belongsTo' => 
        array (size=6)
          0 => string 'className' (length=9)
          1 => string 'foreignKey' (length=10)
          2 => string 'conditions' (length=10)
          3 => string 'fields' (length=6)
          4 => string 'order' (length=5)
          5 => string 'counterCache' (length=12)
      'hasOne' => 
        array (size=6)
          0 => string 'className' (length=9)
          1 => string 'foreignKey' (length=10)
          2 => string 'conditions' (length=10)
          3 => string 'fields' (length=6)
          4 => string 'order' (length=5)
          5 => string 'dependent' (length=9)
      'hasMany' => 
        array (size=11)
          0 => string 'className' (length=9)
          1 => string 'foreignKey' (length=10)
          2 => string 'conditions' (length=10)
          3 => string 'fields' (length=6)
          4 => string 'order' (length=5)
          5 => string 'limit' (length=5)
          6 => string 'offset' (length=6)
          7 => string 'dependent' (length=9)
          8 => string 'exclusive' (length=9)
          9 => string 'finderQuery' (length=11)
          10 => string 'counterQuery' (length=12)
      'hasAndBelongsToMany' => 
        array (size=12)
          0 => string 'className' (length=9)
          1 => string 'joinTable' (length=9)
          2 => string 'with' (length=4)
          3 => string 'foreignKey' (length=10)
          4 => string 'associationForeignKey' (length=21)
          5 => string 'conditions' (length=10)
          6 => string 'fields' (length=6)
          7 => string 'order' (length=5)
          8 => string 'limit' (length=5)
          9 => string 'offset' (length=6)
          10 => string 'unique' (length=6)
          11 => string 'finderQuery' (length=11)
  protected '_associations' => 
    array (size=4)
      0 => string 'belongsTo' (length=9)
      1 => string 'hasOne' (length=6)
      2 => string 'hasMany' (length=7)
      3 => string 'hasAndBelongsToMany' (length=19)
  public '__backAssociation' => 
    array (size=0)
      empty
  public '__backInnerAssociation' => 
    array (size=0)
      empty
  public '__backOriginalAssociation' => 
    array (size=0)
      empty
  public '__backContainableAssociation' => 
    array (size=0)
      empty
  protected '_insertID' => null
  protected '_sourceConfigured' => boolean false
  public 'findMethods' => 
    array (size=6)
      'all' => boolean true
      'first' => boolean true
      'count' => boolean true
      'neighbors' => boolean true
      'list' => boolean true
      'threaded' => boolean true
  protected '_eventManager' => null
  protected '_validator' => null

person zeflex    schedule 26.01.2014    source источник
comment
Пожалуйста, уточните: кажется, моя модель не используется. Что вы на самом деле пытаетесь выполнить в своем действии «редактирования», а что не работает? Кроме того, какая у вас версия CakePHP? И почему в вашей модели есть blablallalsaddasdasdasd.   -  person Dave    schedule 26.01.2014
comment
@ Дэйв, в настоящее время в моей функции редактирования у меня есть только этот код, хорошо. Когда я говорю «моя модель не используется», я имею в виду, что она, кажется, не загружена, потому что у меня нет ошибок php (в моем коде я помещаю неправильные вещи для генерации ошибки). Если все в порядке, это должно сломать код, но это не так. Я надеюсь, что это более ясно. Используемая версия 2.4.4   -  person zeflex    schedule 26.01.2014
comment
Вместо того, чтобы задавать вопрос о проблеме, которой не существует, попробуйте задать нам реальную проблему. Например... когда я пытаюсь выполнить find(), он выдает ошибку или возвращает неправильные данные... и т.д. Вы в основном говорите, что вот какой-то код, у которого нет проблем - в чем проблема? Ответ - ничего.   -  person Dave    schedule 26.01.2014
comment
Ладно. Моя ошибка заключается в том, что когда я пытаюсь сохранить свои данные, моя первоначальная ошибка: отсутствует таблица базы данных | Ошибка: таблица статистики для модели Stat не найдена в источнике данных по умолчанию.   -  person zeflex    schedule 26.01.2014


Ответы (2)


У меня есть StatModel.php с

Переименуйте файл StatModel.php в Stat.php и убедитесь, что он находится в папке Model. Файлы моделей не добавляются со словом Model. Я знаю, это несовместимо с контроллерами, но я не писал Cake :)

Когда я вызываю /stats/edit, кажется, что моя модель не используется, я не получил никаких ошибок, а также я не могу изменить имя таблицы (я хочу использовать таблицу подсказок)

CakePHP не смог найти файл Stat.php в папке с моделями, поэтому он автоматически создает поддельную модель. Используя имя модели в качестве шаблона, он ищет таблицу stats.

person Reactgular    schedule 26.01.2014
comment
Большой !! Спасибо Мэтью! - person zeflex; 26.01.2014
comment
Я совершал эту ошибку много раз. Я бы хотел, чтобы в Cake была функция отключения моделей автомобилей. Подождите, пока вам не придется отслеживать неудачную ассоциацию. - person Reactgular; 26.01.2014
comment
Подделка -> экземпляр AppModel. Что можно подтвердить с помощью debug (get_class ($this-> Stat)); - person AD7six; 26.01.2014
comment
Мэтью. Вы можете использовать конструктор модели приложения, чтобы проверить класс и создать исключение, чтобы выделить такие ошибки. - person AD7six; 26.01.2014
comment
@ AD7six, что get_class вернет? Модель приложения или модель? - person Reactgular; 26.01.2014
comment
@ AD7six, о, это отличная идея! - person Reactgular; 26.01.2014

Я предполагаю, что инфлектор не может правильно преобразовать статистику в статистику. Не используйте аббревиатуры, почему не статистика? Почему бы не TipsController вообще, если вы имеете дело с таблицей подсказок?

Однако, если вы хотите использовать эту модель, попробуйте:

public $uses = array('Stat');

в вашем контроллере, чтобы явно установить эту модель.

person floriank    schedule 26.01.2014
comment
он уже загружает модель, иначе он не сможет успешно отладить $this->Stat, верно? - person Dave; 26.01.2014
comment
Я не пробовал, но другой ответ исправляет мою проблему. Спасибо кстати. - person zeflex; 26.01.2014
comment
-1 здесь нет ничего плохого ни в интонациях, ни в использовании аббревиатур. - person AD7six; 26.01.2014
comment
@Dave до того, как вы отредактировали его вопрос, он показал вывод отладки объекта модели: это была AppModel. Это означает, что он не загружал правильную модель, и поэтому я угадал причину. - person floriank; 27.01.2014
comment
моя беда - вставь обратно. - person Dave; 27.01.2014