我正在将CakePHP构建的网站从Pervasive转换为SQL Server 2005.在经历了很多麻烦之后,我已经开始使用ADODB驱动程序和'connect'作为odbc_mssql。这连接到我们的数据库并构建SQL查询就好了。
然而,这就是问题:我们的一个模型与Pervasive中的SQL视图相关联。我移植了视图,但是看起来我使用的设置是CakePHP无法在SQL Server中找到View。
经过一些谷歌搜索后找不到多少 - 还有其他人遇到过像这样的问题吗?是否有解决方案/解决方法,或者我的未来是否有一些重新设计?
答案 0 :(得分:2)
首先,您使用的是哪个版本的CakePHP?我假设它是关于CakePHP 1.2 +。
我不熟悉SQL Server 2005(也没有任何其他版本),但经过一些调查后,我认为问题出在DboMssql::listSources()
方法中,该方法从INFORMATION_SCHEMA.TABLES
中选择可用的表名称,因此它没有“看到”任何可用的观点。
更改DboMssql::listSources()
以从sys.tables
中选择可用的表名称,如果我对sys.tables
有误,则选择另外从{{1}中选择名称}。
所以,不要乱用CakePHP核心文件,你必须创建自定义数据源,扩展DboMssql并覆盖INFORMATION_SCHEMA.VIEWS
方法。为此,您必须:
创建::listSources()
:
<path/to/app>/models/datasources/dbo/dbo_custom_mssql.php
<?php
App::import('Datasource', 'DboMssql');
class DboCustomMssql
extends DboMssql
{
public
function listSources()
{
$cache = DboSource::listSources();
if ($cache != null) {
return $cache;
}
$result = $this->fetchAll('SELECT TABLE_NAME FROM SYS.TABLES', false);
if (!$result || empty($result)) {
return array();
} else {
$tables = array();
foreach ($result as $table) {
$tables[] = $table[0]['TABLE_NAME'];
}
DboSource::listSources($tables);
return $tables;
}
}
}
config:config/database.php
NB:最糟糕的是'driver' => 'custom_mssql'
接口有点破碎(没有可选的DboMssql::listSources()
参数(如$data
声明))并且没有提供任何扩展点,因此,为了进行源列表缓存,我们不得不拨打Datasource::listSources()
而不是损坏DboSource::listSources()
。
答案 1 :(得分:0)
我正在愉快地显示SQL Server视图。我对你的主要区别是我使用的是mssql驱动程序而不是odbc_mssql驱动程序。也许你应该尝试切换到那个并找出你在那里遇到的任何问题。