CodeIgniter でつくる、あゆ板風何か vol.3

データベース、モデル周りを作っていきたいと思います。

テーブル作成

MySql を利用します。別途利用可能なユーザーとデータベースを作ったことを前提に話を進めます。

CREATE DATABASE ayuitaclone CHARACTER SET utf8;
CREATE TABLE items (
  id INTEGER(32) AUTO_INCREMENT,
  provider_name VARCHAR(255),
  provider_email VARCHAR(255),
  provider_comment VARCHAR(255),
  pw_edit CHAR(40),
  name VARCHAR(255),
  type INTEGER(2),
  uri TEXT,
  force_post INTEGER(1),
  dl_limit INTEGER(4) DEFAULT 0,
  dl_count INTEGER(4) DEFAULT 0,
  created_at DATETIME,
  updated_at DATETIME,
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

CREATE TABLE types (
  id INTEGER(32) AUTO_INCREMENT,
  name VARCHAR(255),
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

CREATE TABLE thanks (
  id INTEGER(32) AUTO_INCREMENT,
  item_id INTEGER(32) NOT NULL,
  name VARCHAR(255),
  email VARCHAR(255),
  comment TEXT,
  created_at DATETIME,
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

INSERT INTO types ( name ) VALUES ( '写真' );
INSERT INTO types ( name ) VALUES ( '映像' );
INSERT INTO types ( name ) VALUES ( '詩' );
INSERT INTO types ( name ) VALUES ( 'その他' );

INSERT INTO items (
  provider_name,
  provider_email,
  provider_comment,
  pw_edit,
  name,
  type,
  uri,
  force_post,
  dl_limit,
  created_at,
  updated_at
) VALUES (
  '名無しのポエム職人',
  '774poem@example.com',
  '青春時代の熱き思いでを込めたポエムです。',
  '9999',
  '青春ポエム3',
  1,
  'http://example.com/poem/seisyun3.txt',
  1,
  99,
  NOW(),
  NOW()
);
INSERT INTO thanks (
  item_id,
  name,
  email,
  comment,
  created_at
) VALUES (
  1,
  '通りすがりの名無し',
  'a774@example.com',
  'ポエム、詠ませていただきます。ありがとうございました。',
  NOW()
);
上記 SQL でテーブルを作成してください。ついでにデータも入れました。

ローカル環境の設定として config/database.php を各自の環境に合わせて、データベースへの接続設定をおこなってください。

$db['default']['username'] = 'ayuitaclone';
$db['default']['password'] = 'ayuitaclone';
$db['default']['database'] = 'ayuitaclone';

ずいぶんいい加減で良くないパスワードですが、開発用ということで。

CC 用の設定を記述する場合は。追加したアドオンの mysql の接続情報をコマンドで確認できます。

cctrlapp APP_NAME/default addon mysql.free
Addon                    : mysql.free
 Settings
   mysql_password           : XXXXXXXXXXXXXXXX
   mysql_max_connections    : 2
   mysql_dbsize             : 5
   mysql_database           : XXXXXXXXXXX
   mysql_username           : XXXXXXXXXXX
   mysql_hostname           : 127.0.0.1

帰ってきた値を使って、設定を書き加えます。

$db['cc']['hostname'] = '127.0.0.1';
$db['cc']['username'] = 'depur5vmesc';
$db['cc']['password'] = 'bVbDwQeUeNbYdML';
$db['cc']['database'] = 'depur5vmesc';

前後しますが、CC 上ではこちらの設定を読み込むように、サーバ変数を利用して分岐をつくります。

$active_group = 'default';
+if( FALSE !== strpos( $_SERVER['HTTP_HOST'], 'cloudcontrolled.com' ) ){
+  $active_group = 'cc';
+}

他にも、DEPLOYMENTNAME や DEPLOYMENTID というような値も格納されているので、CC の環境によっての分岐を組み込むこともできそうです。

もうちょいイイ環境の切り分け方があったら教えていただけると幸いです。

CC のデータベースへアクセスする方法はドキュメントにあるように

  • Developers » Documentation » Add-ons » MySQL documentation

stunnel という ssl ラッパーを使って接続接続するようなのですが、私の力不足でよくわからず途中で投げてしまいました(後できちんと勉強しよう…)

そこで、横着でちょっと問題のある方法ですが、phpMyAdmin を凄くシンプルにしたような adminer という DB 管理 php スクリプトを配置して、ログインします。

adminer-3.3.3.php をプロジェクトのルートに(adminer.php にリネームし)配置し、.htaccess を少し書き換えます。

-RewriteCond $1 !^(index.php|assets|images|robots.txt)
+RewriteCond $1 !^(adminer.php|index.php|assets|images|robots.txt)

ここで adminer.php と .htaccess をコミットしたら改めて、cc にデプロイします。

cctrlapp ayuitaclone/default push
cctrlapp ayuitaclone/default deploy

デプロイしたら、/adminer.php にアクセスし、上記のログイン情報でログインします。

latin1_swedish_ci を utf8_general_ci に変更します。

あとは WebUI からテーブルを作成してください。

adminer はいつまでも残しておくのもアレなので、作業完了時か、完成したら、もしくは .htaccess でパスワードをかけるなどしてください。

モデル作成

データベースに一件、提供品データをいれたので、item モデルを作ります。

class Item_model extends CI_Model {
  public function find_all(){
    $res = $this->db
      ->select( 'items.*, types.name type_name' )
      ->join( 'types', 'items.type = types.id' )
      ->order_by( 'items.created_at', 'desc' )
      ->get( 'items' );
    return $res->result();
  }
}

全件取得するメソッドを作っておきます。種類を join して取得もしています。

提供品一覧に取得データを表示

コントローラとビューには既に実装済みなので、これで DB からデータをコントローラーで取得、ビューに受け渡して表示というところまで出来ました。

次は提供品の表示、登録を実装していきます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする