この記事は、CakePHP Advent Calendar 2014の25日目の記事です。
2014/12/25 0:08追記>> PHPのバージョンは5.5, SQLServer2008, CakePHP3はdevの最新版です。
普通の人は、まずCakePHPを選択した時点でSQLServerを選ぶことはないと思いますがw CakePHP2の時も、デフォルトの状態ではLinuxからSQLServerに接続出来なかったので、CakePHP3でも試してみました。
CakePHP2の場合の手順は、過去のエントリーを参照下さい。
とりあえず、CakePHP3をcomposerでセットアップして、sandboxアプリを立ち上げて、app.phpの設定でdriverとしてSqlserverを選択します。
1 | 'Datasources' => [ |
やはり駄目ですね。 恐らく原因は、dbo_sqlsrvを探しに行っているからだと思いますが、コードをチェックしてみます。
Connection.phpでdriverをnewしている箇所で、Sqlserverのdriverのコンストラクターが呼び出されて死んでます。
具体的には「vendor/cakephp/cakephp/src/Database/Driver/Sqlserver.php」の40行目ですね。
メンバ変数に初期値をセットしている部分で、pdo_sqlsrvの定数を参照して死にます。
1 | 'encoding' => PDO::SQLSRV_ENCODING_UTF8, |
SQLSRV_ATTR_ENCODING_UTF8は、pdo_sqlsrvには存在するものですが、残念ながらLinux用のpdo_sqlsrvは無いのです。
というわけで、やっぱりSQLServerに接続できないので、ちょっぴりdriverを改造します。
1 | 40c40 |
sqlsrvをdblibに差し替える&pdo_dblibでサポートされてない定数の参照を削除しました。
これで、ひとまずdatabaseに接続することは出来ました。
でも、まともに動かないんじゃ話にならないので、blogチュートリアルをやってみると・・・
う、動かない・・・(ノД`)シクシク
簡単にごまかせるかと思いましたが、ORMapper内のSQLServerの方言解釈あたりで、よく分からんバグり方をしているようです。
そもそもWindowsでも動くのだろうか・・・、あやしいぞw。(-_-;)
2014/12/25 0:08追記 >> articlesテーブルからの一覧取得が出来なかったです。単純なSELECT句だと思います。
というわけで、接続は出来ましたが、アプリケーションは動かずということでした。
なので、SQLServer&Linuxのユーザは、まだCakePHP3は危険なのでやめたほうが良さそうです。
試してないので、何ともいえないですが、Driver非依存の箇所でエラーが起きているので、WindowsサーバのPHPでも上手く動かない可能性もあると思います。
CakePHP3でSQLServerに接続できないんて悲しいので、引き続きトライしてみます。 メリークリスマス!