如何在cakephp3中创建一个不是ORM的模型?

时间:2015-07-27 15:22:02

标签: cakephp model controller cakephp-3.0

我正在尝试在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”

我做错了什么?

谢谢,

1 个答案:

答案 0 :(得分:0)

那不是&#34;型号&#34; (表)可以使用loadModel()加载,它只是一个恰好位于Model\Table命名空间的类。

首先,我建议您将该课程放在其他地方,它不是表格类,它与模型层松散相关,只提供实用功能,例如{{1可能是一个更好的地方。

话虽如此,您只需像其他任何类一样使用它并手动实例化。

Model\Utility

另一方面,鉴于该方法实际上没有触及实例,您可以将其设为静态。