2012-01-26 1 views
0

После обновления с Cake 1.3 до 2.0 я получаю ошибки в таблице для всех моделей, которые используют базы данных просмотров, а не таблиц. Мои модели с использованием таблиц все еще работают нормально. Изменение этих моделей для использования таблиц устраняет проблему, но мне нужны представления.Используйте представление базы данных для модели в CakePHP 2.0

В прошлом это работало, как this question shows; представления работали точно так же, как и таблицы. Однако после переезда в торт 2.0 я получаю:

Error: Database table myView for model myModel was not found

Вот класс пример Модель:

class Hauler extends AppModel 
{ 
    var $useTable = 'hauler_view'; 
    var $primaryKey = 'id'; 
    var $useDbConfig = 'default'; 
} 

Точка зрения hauler_view существует и работает в приложении в 1.3. Копирование одних и тех же данных из представления в физическую таблицу будет работать, если я настрою модель вместо этой физической таблицы.

Я подтвердил, что я могу получить доступ к представлениям базы данных через исходные SQL-функции Cake, поэтому я могу получить доступ к этим представлениям, это просто, что модели не видят «таблицы».

Я использую SQL Server 2005 с драйвером sqlsrv, если это имеет значение. На моем сервере установлен собственный клиент SQL Server 2008, который позволяет этой версии тортов получить доступ к SQL Server.

Есть ли способ, чтобы модели в CakePHP 2.0 использовали представления, а не таблицы?

Я решил this related problem, поэтому теперь я знаю, что мой драйвер базы данных работает правильно и не является проблемой.

ответ

1

Это Open Bug в ветке Cake PHP 2.0, ошибка затрагивает только SQL Server и не позволяет моделям использовать представления SQL Server. Он будет исправлен в выпуске Cake 2.0.6.

0

Попробуйте добавить этот код перед открытием класса:

App::uses('AppModel', 'Model'); 

Ваш код кажется правильным

+0

Вы имеете в виду, что это в файле для класса модели или контроллера, открывающего модель? В любом случае это не сработало (поскольку он расширяет AppModel, он должен наследовать модель в любом случае). Я действительно не знаю, что отличает эти модели взглядов ... –

+0

да, CakePHP 2, необходимо. Интересно, что все еще не работает, вы можете поместить всю модель кода? –

+0

Вот и весь класс кода (который в этом случае мог быть выведен на самом деле), и я не настраиваю AppModel. Сейчас я работаю над предложением cdburgess –

1

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

1- Попробуйте использовать upgrade shell для устранения данной проблемы: 2- Проверьте, чтобы убедиться, что название модели файл называется правильно: app/Model/Hauler.php [чувствительность к регистру примечание на файл и путь] 3- Убедитесь, что файл AppModel.php существует в каталоге Model. Вероятно, это проблема. Обратите внимание, что говорит книга:

The app/app_controller.php, app/app_model.php, app/app_helper.php are now located and named as app/Controller/AppController.php, app/Model/AppModel.php and app/Helper/AppHelper.php respectively.

И вершина AppModel.php должна содержать положение польз:

<?php 
App::uses('Model', 'Model'); 
class AppModel extends Model { 

} 
?> 

Вы можете прочитать об изменениях в AppModel.php the book, а также.

+0

Я сделал все эти шаги; AppModel не был настроен, поэтому у меня не было его в приложении/модели, но копирование значения по умолчанию Cake в этот каталог ничего не делало. Скрипт обновления не исправил все, снова запустил его и все еще получал проблему. Большинство моделей * работают *, а не одни с представлениями –

+0

. Применения/ect, перемещающиеся в приложение/каталоги, - это изменение для 2.1, но не 2.0, но спасибо за ссылку, я пошел вперед и внес эти изменения для будущей проверки. взгляды все еще сломаны. –

+0

Я предполагаю, что следующее, что нужно проверить, - это подключение к SQL Server и способы обработки представлений. У меня нет доступа к этому, поэтому я не смогу быть дополнительной помощью. Сожалею. Но я рад слышать, что установка правильная и ее можно исключить. Это может быть проблема, связанная с тем, как клиент 2008 связывается с сервером 2005 года? –