我正在尝试在CakePHP3.0中创建一个模型,它允许我通过名称检查视图是否存在,如果是这样,则获取该视图中的列名称。
在src / model / table中我创建了一个ViewQuerier.php文件:
<?php
namespace App\Model\Table;
use Cake\Datasource\ConnectionManager;
class ViewQuerier {
public function checkViewExists($viewName = null) {
$connection = ConnectionManager::get('default');
if ( $viewName == null ) {
return false;
}
$sql = "SELECT TABLE_NAME
FROM information_schema.tables
WHERE TABLE_TYPE like 'VIEW' AND TABLE_SCHEMA = database()
AND TABLE_NAME = :VIEW_NAME";
$result = $connection()
->execute( $sql, ['VIEW_NAME' => $viewName ] )
->fetch('assoc');
if (count($result))
{
$sql = "SHOW COLUMNS FROM :VIEW_NAME";
return $connection()
->execute($sql, ['VIEW_NAME' => $viewName ] )
->fetch('assoc');
}
return false;
}
}
在控制器中,我有以下加载模型:
public function initialize()
{
$this->loadComponent('RequestHandler');
$this->loadModel('ViewQuerier');
}
然后调用这样的方法:
public function view($viewname)
{
$this->viewName = $viewname;
$this->ViewQuerier->checkViewExists($this->viewName);
}
我得到的错误是:
未知方法“checkViewExists”
我做错了什么?
谢谢,
答案 0 :(得分:0)
那不是&#34;型号&#34; (表)可以使用loadModel()
加载,它只是一个恰好位于Model\Table
命名空间的类。
首先,我建议您将该课程放在其他地方,它不是表格类,它与模型层松散相关,只提供实用功能,例如{{1可能是一个更好的地方。
话虽如此,您只需像其他任何类一样使用它并手动实例化。
Model\Utility
另一方面,鉴于该方法实际上没有触及实例,您可以将其设为静态。