如何设置数据库视图夹具?

时间:2015-12-15 13:31:26

标签: cakephp

是否可以在CakePHP中设置一个可以创建数据库视图而不是数据库表的工具?在创建表的夹具中以及应该是数据库视图的另一个夹具中使用相同的数据似乎是低效的。

1 个答案:

答案 0 :(得分:1)

我设法这样做,其中view_my_model.sql包含生成数据库视图的SQL:

class ViewMyModelFixture extends AppFixture {

    public function create($DboSource) {
        $path = APP . 'Config' . DS . 'sql' . DS . 'view_my_model.sql';
        $File = new File($path);
        if (!$File->exists()) {
            throw new CakeException($path . ' does not exist');
        }
        if (!$File->readable()) {
            throw new CakeException($path . ' is not readable');
        }
        $sql = $File->read();
        if (empty($sql)) {
            throw new CakeException($path . ' has no SQL');
        }
        try {
            $DboSource->execute($sql);
            $this->created[] = $DboSource->configKeyName;
        } catch (Exception $exception) {
            $msg = __d('cake_dev', 'Fixture creation for "%s" failed "%s"', $this->table, $exception->getMessage());
            CakeLog::error($msg);
            trigger_error($msg, E_USER_WARNING);
            return false;
        }
        return true;
    }

    public function drop($DboSource) {
        try {
            $sql = 'DROP VIEW ' . $DboSource->fullTableName($this->table) . ";";
            $DboSource->execute($sql);
            $this->created = array_diff($this->created, array($DboSource->configKeyName));
        } catch (Exception $exception) {
            return false;
        }
        return true;
    }

    public function truncate($DboSource) {
        return;
    }
}