ビューテーブルの作成
buncho > ビューテーブルの作成 @ 2014/9/3 15:50 |
---|
こんにちは。ビューテーブルを含む既存プログラムをBaserCMSプラグイン化したいと思っているのですが、
そのような仕組みはありますでしょうか。 #Schema.phpはテーブルのみだと認識しているので・・・ #勿論、そもそもビューが宜しくないのは重々承知しております・・・ |
n1215 > Re: ビューテーブルの作成 @ 2014/9/5 14:54 |
---|
buncho 様
こんにちは。 ご要望は 「プラグインインストール時にテーブル作成・初期データ投入に加えて自動的にSQLのビューも作成するようにしたい」 という内容で間違いないでしょうか? SQLのビューはほとんど使ったことがないので詳しくないですが、 既存のプログラムがそのまま移植できるならそちらのほうが便利ですよね。 baserCMSのソースを見てみたところ 特別にご要望の処理を支援する専用の機構はないようです。 しかし初期化時にSQLのビューを作成することは可能なはずです。 ●プラグインのインストール まずはプラグインのインストール時の基本的な処理の流れを軽くご説明します。 Blogプラグインを例に取ります。 こちらがプラグインをインストールするときに実行されるファイルです。 /lib/Baser/Plugin/Blog/Config/init.php https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/Plugin/Blog/Config/init.php
唯一書かれているPluginモデルのinitDb()メソッドを見てみると /lib/Baser/Model/Plugin.php https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/Model/Plugin.php Plugin::initDb()
Pluginの親の親のクラス/lib/Baser/Model/BcAppModel.phpから継承されていることがわかります。 データベースを初期化するメソッドです。 https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/Model/BcAppModel.php BcAppModel::initDb() プラグイン以外のテーブルの初期化にも使えるメソッドなのですが、大きく分けて2つの処理を行います。 -BcAppModel::loadSchema() →/lib/Baser/Plugin/Blog/Config/Schema/*****.phpに書いた内容でデータベーステーブルを変更 -BcAppModel::loadCsv() → /lib/Baser/Plugin/Blog/Config/Data/以下のCSVの初期データを読み込む ※さらに処理を追うと両メソッドとも以下のクラスに処理の本体があり、SchemaやData以下のファイルが読み込まれます。 /lib/Baser/Model/Datasource/DboSource https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/Model/Datasource/DboSource.php ネストが深いので少し追いにくいですが、init.phpの1行の処理によって ・テーブル構造の変更 ・初期データの投入 が行われていることが確認できます。 ●どこに処理を書くか 本来ならSchema/****.php(CakePHPのCakeSchemaクラスを継承)にSQLビューの作成処理を書けるとわかりやすいと思います。 しかし、一見スキーマの処理後に呼ばれそうに見えるafter()メソッドはCakeのコンソールによるスキーマ変更時しか呼ばれないようです。 https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/Plugin/Blog/Config/Schema/blog_comments.php したがってinit.phpの末尾にSQLビューの作成処理を書き加えるのが無難でしょう。 ●どう書くか 今手元で試していないので以下は方針だけになり恐縮ですが(書き間違ってたらすみません)、 ConnectionManagerクラスを使ってDataSourceのインスタンスを取得すればそのメソッドから生のSQLを実行可能なはずです。
こんな感じでいかがでしょう? Twitter: @n_1215 |
buncho > Re: ビューテーブルの作成 @ 2014/9/8 10:26 |
---|
n1215さん!こんにちわ!
ありがとうございます!おかげさまでViewテーブルを作成することができました。 Drop View文は、どこかでPluginフックを実装する必要がありそうですね。 とても参考になりました。 |