Как исправить ошибку cfWheels: Wheels.TableNotFound? - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в Cfwheels и MVC. Веб-сайт Cfwheels запущен и работает.
Я успешно завершил https://guides.cfwheels.org/docs/beginner-tutorial-hello-world.
Теперь я пытаюсь просто проверить соединение cfwheels с mySql базой данных. У меня НЕТ таблиц в базе данных mySql.

Я получаю ошибку:

Wheels.TableNotFound Таблица ttt_shows не найдена в базе данных.

Предлагаемое действие

Добавьте таблицу с именем ttt_shows в свою базу данных или сообщите CFWheels использовать другую таблицу для этой модели. Например, вы можете указать пользовательской модели использовать таблицу с именем tbl_users, создав файл User.cf c в папке моделей, создав внутри него метод init, а затем вызвав из него таблицу ("tbl_users").

Таблица ttt_shows не найдена в базе данных. <Местоположение ошибки: строка 4 в представлениях \ ttt_show \ cf_info_ mysql .cfm; </p>

<cfset mySqlVerStruct= model("ttt_show").getMySqlVersion1() />

Тег контекста;

Ошибка, выданная в строке 169 в колесах \ model \ adapters \ Base.cf c
, вызванная из строки 72 в колесах \ model \ initialization.cfm
, вызванная из строки 1 в root .cfm
вызывается из строки 576 в wheel \ global \ internal.cfm
вызывается из строки 861 в wheel \ global \ internal.cfm
вызывается из строки 164 в wheel \ global \ cfml.cfm
вызывается из строки 14 в колеса \ global \ cfml.cfm
вызывается из строки 206 в колеса \ global \ publi c .cfm
вызывается из строки 4 в представлениях \ ttt_show \ cf_info_ mysql .cfm
вызывается из строки 128 в wheel \ global \ cfml.cfm
вызывается из строки 434 в wheel \ controller \ render.cfm
вызывается из строки 157 в wheel \ controller \ render.cfm
, вызываемой из строки 53 в колесах \ controller \ processing.cfm
, вызываемых из строки 141 в колесах \ controller \ processing.cfm
, вызываемых из строки 95 в колесах \ controller \ processing.cfm
, вызываемых из строки 198 в колесах \ dispatch \ request.cfm
вызывается из строки 1 в wheel \ index.cfm
вызывается сюда m строка 1 в index.cfm
вызывается из строки 1 в wheel \ events \ onrequest.cfm


Примечание. Связанная / часть моего вопроса:; Как в CfWheels создать модель, у которой нет связанной таблицы базы данных? В будущем мне нужно будет кодировать модель, к которой не присоединена база данных, но которая выполняет операции CRUD с файлом xml или json. Заранее спасибо за любую помощь / руководство.


Пока у меня есть следующий код:

<!--- FILE: ..\views\ttt_show.cfm --->
<h1>MySql Version Query using;  model("ttt_show").getMySqlVersion1() </h1>

<cfset mySqlVerStruct= model("ttt_show").getMySqlVersion1() />

<cfdump var="#mySqlVerStruct#" label="MySql version" />

<cfcomponent extends="Model">
  <!--- FILE: ..\models\ttt_show.cfc --->
  <cffunction name="init">
  </cffunction>

  <!--- - -   getMySqlVersion1()  - - --->
  <cffunction name="getMySqlVersion1">
    <!--- USED BY ..\views\ttt_show\cf_info_mysql.cfm --->
    <cfset retStruct=S tructNew( "qryMySqlVersion1") />
    <cfset retStruct.errorStr="" />
    <cfset retStruct.datasource="#get('dataSourceName')#" />
    <cfset retStruct.username="#get('dataSourceUserName')#" />
    <cfset retStruct.password="#get('dataSourcePassword')#" />
    <cfset retStruct.qry="" />
    <cfreturn retStruct>
  </cffunction>

  <!--- - -   getMySqlVersion2()  - - --->
  <cffunction name="getMySqlVersion2">
    <!--- USED BY ..\views\ttt_show\cf_info_mysql.cfm --->
    <cfquery name="MySqlVersion2" debug="no" datasource="#APPLICATION.wheels.DATASOURCENAME#" timeout="5">
      select version() as mysql_version
    </cfquery>
    <cfreturn MySqlVersion2>
  </cffunction>

  <!--- - -   Create...Table()  - - --->
  <cffunction name="createEmptyTable">
    <cfquery result="myCreateTblResults" datasource="#get('dataSourceName')#">
      CREATE TABLE IF NOT EXISTS `tbl_masters` ( `id` int(11) unsigned NOT NULL auto_increment COMMENT 'unique primary key id', `textValue` varchar(255) default NULL COMMENT 'any text value', `numValue` int(11) default NULL COMMENT 'any numeric value', `dtValue`
      datetime default NULL COMMENT 'any datetime value', `recStatus` tinyint(4) NOT NULL default '1' COMMENT 'Status of This Record', `dtCreated` datetime NOT NULL COMMENT 'date that record was created', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8
      COMMENT='Stores any general key/value pairs for app, MASTER in master-slaves relationship';
    </cfquery>

    <!--- return false: error: not tested yet --->
    <cfreturn false>
  </cffunction>
</cfcomponent>

<cfcomponent extends="Controller"><!--- FILE: ..\controllers\ttt_show.cfc --->
    
	<!--- 
	--- Show debug info / or test a '..\view\*.cfm file.
	--->

	<!--- SEE ..\views\ttt_show\cf_info_mysql.cfm --->
    <cffunction name="cf_info_mysql">	
    </cffunction>    
    
</cfcomponent>

1 Ответ

0 голосов
/ 15 февраля 2020

После прочтения я узнал общий ответ (но еще не тестировал код).

В https://guides.cfwheels.org/docs/object-relational-mapping под заголовком; Документация "Модели без таблиц базы данных" объясняет, что в файл model / *. Cfm необходимо добавить;

function config() {
  table(false);
  }

Из документа;

"Благодаря этому у вас есть основание для модели, которая никогда не касается базы данных. Когда вы вызываете такие методы, как save (), create (), update () и delete (), без таблицы, весь жизненный цикл модели все еще будет работать, включая проверку объекта и обратные вызовы объекта. "

Теперь, если я смогу просто найти пример исходного кода модели этого типа.

...