私は最近、CakePHP1.3のMSSQL2008に対して使用することを意図して、odbcドライバーをよく調べました。あなたがかなりの量の仕事をする準備ができていない限り、それは現在実行可能ではありません。
差し迫った問題は、デフォルトの引用符を[と]でオーバーライドする必要があることです。これらは、ここのdbo_odbc.phpファイルの先頭に設定されています
var $startQuote = "[";
var $endQuote = "]";
これを実行すると、次に発生する問題はLIMITのデフォルトの使用であるため、オーバーライドするためにdbo_mssqからコピーされた独自の制限関数を提供する必要があります。
/**
* Returns a limit statement in the correct format for the particular database.
*
* @param integer $limit Limit of results returned
* @param integer $offset Offset from which to start results
* @return string SQL limit/offset statement
*/
function limit($limit, $offset = null) {
if ($limit) {
$rt = '';
if (!strpos(strtolower($limit), 'top') || strpos(strtolower($limit), 'top') === 0) {
$rt = ' TOP';
}
$rt .= ' ' . $limit;
if (is_int($offset) && $offset > 0) {
$rt .= ' OFFSET ' . $offset;
}
return $rt;
}
return null;
}
次に、2つの問題が発生しますが、どちらも解決しませんでした。
- describe関数で、odbc_field_type呼び出しがフィールドタイプを返していません。モデルのフィールドを説明する場合、これがどれほど重要かはわかりませんが、有望ではありません。
- さらに重要なことに、フィールドリストを生成するために使用されるfields関数では、を再帰的に展開することでケーキが機能します。一連のASエイリアスを生成するための構文。再帰レベルがゼロの場合はこれで問題ありませんが、再帰が深くなると、「this.that.other AS this_dot_that.other AS this_dot_that_dot_other」のようなフィールドリストが作成されます。これは、無効なMSSQL構文です。
これらはどちらも解決できませんが、この時点で、ODBCドライバーで問題を追跡し続けるよりも、サーバーをリロードしてMSSQLドライバーを使用する方が簡単であると判断しましたが、YMMV
追加:この質問は少し注目を集めているようです。したがって、これをさらに進める人は誰でも、この回答にコードを追加できます。うまくいけば、私たちの間で解決策を組み立てることができます。