Cakephp нумерация страниц с использованием временной таблицы - PullRequest
0 голосов
/ 17 ноября 2011

Я создал временную таблицу с использованием cakephp $this->Model->query() и вставил несколько записей, используя тот же $this->Model->query().Я хочу разбить временную таблицу на страницы.Я загрузил временную модель следующим образом.

App::import('Model', $tmpModel);
$this->loadModel($tmpModel);

Ссылка URL: Создайте временную таблицу в CakePHP и загрузите ее как модель

К сожалению, разбиение на страницы не произошлои я получил следующую ошибку.

Таблица базы данных "имя таблицы" для модели "название модели" не найдена.Хотя имя таблицы и название модели были написаны в соответствии с соглашением о CakePHP.

Что может быть возможным решением для этого.

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Я почти уверен, что вы не сможете сделать это, используя временные таблицы. Это связано с тем, что базовое кэширование схемы Cake использует MySql ' SHOW TABLES ', который не не возвращает временные таблицы - следовательно, вы всегда получите таблицу "Таблица базы данных" название "для модели" название модели "не найдено"

Поэтому я предлагаю создать стандартную таблицу и затем отбросить ее, как только вы закончите. Вот пример, который может быть вызван из контроллера ' Users ':

// Define temporary model
$tempModel = 'TempUser';

// Create table
$this->User->query("CREATE TABLE IF NOT EXISTS `". Inflector::tableize($tempModel)  ."` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  `email` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;");

// load the model
$this->loadModel($tempModel);

/**
 * Prevent caching of database schema and then get
 * the latest schema that includes our new table
 */
$this->$tempModel->cacheSources = false;
$this->$tempModel->schema();

// Save
$this->$tempModel->save(array(
  $tempModel => array(
    'name' => 'Testing',
    'email' => 'joe.bloggs@google.co.uk'
  )
));

// Paginate
$data = $this->paginate($tempModel);

// Drop Table
$this->User->query("DROP TABLE `". Inflector::tableize($tempModel)  ."`");
0 голосов
/ 23 сентября 2014

Можно выполнить разбиение на страницы, секрет заключается в том, чтобы создать модель для временной таблицы и переопределить функцию 'setSource' в Модели, чтобы не проверять имя таблицы по кешированному списку таблиц (который был создан очень много). ранее).

Пожалуйста, смотрите мой ответ с более подробной информацией здесь: CakePHP не может найти таблицу после создания таблицы

Большое спасибо всем, кто отправил http://web2.0goodies.com/blog/uncategorized/mysql-temporary-tables-and-cakephp-1-3/ за подсказку.

Обратите внимание, что этот метод также работает для временных таблиц, создаваемых на лету.

0 голосов
/ 17 ноября 2011

Я рекомендую вставить записи с сохранением после того, как вы создали модель tmp.

Проблема здесь в кеше, попробуйте удалить кеш, и он может работать.

чтобы предотвратить кеширование ваших запросов, вы можете использовать cacheQueries = false; Я не пробовал эту последнюю вещь, но вы кешируете проблему, поскольку она кэширует текущую схему (без временной таблицы), а затем, когда она существует, она не может найти ее, так как использует кеш: S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...