(゚д゚)こんばんわ、中の人デスヨ。
量的にも中途半端だったので分けてみた。(ぉ
むしろAAを自重しるといわれそうだがAAなくしてこのブログは成り立たないので却下。(なんというry
_n
( l ハ,,ハ
\ \ ( ゚ω゚ ) +
ヽ___ ̄ ̄ ) AA自重お断りします
/ /
さてcodeigniterには便利なDBツールがある。
前までのくだりでわかったように、いちいちDBへ接続してupdateを掛けたりdeleteしたりせずとも、ツールを使うことでインサート、デリート、アップロードが自由にできるようになる。
そのツールこそ"scaffold"だ。(ようやく出てきた。つかCakePHPにもsymfonyでも使える様。
DBの利用目的としては「DBによる顧客情報の管理」から『フォーム部分での質問集』(たとえが滅茶苦茶デスガキニシナイ)、変化したりしなかったりと様々デスネ。
現に社内で使う為のツールにユーザー登録機能をつける意義はあんましないデスヨネー(社員が日雇いなら需要はあるかもですが…。)あんまなければ社員が入社or退社時に直接社員テーブルにインサート、デリート文を一回実行すればいいだけだし。
ということで話はそれましたが、DBには全部の機能を必要とする場合もあれば、データの閲覧だけできればいい場合もあります。で。scaffoldは、すべての機能をオールインワンで提供してくれる便利なツールです。
なので単純にデータを確認するだけ というならscaffoldを使用して確認すれば良く、また、その利用も簡単です。
つまるところDBの臨時の管理機能といったところでしょうか。
そんであ実際に使う為の操作を。
まずは設定ファイルを修正。
『aplication』フォルダ内の『config』フォルダを開き、その中から「routes.php」を見つけ出し編集しやう。
そして次の行を検索。
$route['scaffolding_trigger'] = "";
これがscaffoldを使う為のトリガーだ。
これを編集しよう。
$route['scaffolding_trigger'] = "myscaffold";
myscaffoldへ編集してみた。これでファイルを保存すれば準備おk。
この$route['scaffolding_trigger']="myscaffold";の値は、scaffoldの機能にアクセスするためのアドレス指定に使われるものです。例えば、Heloクラスで使うならば、helo/myscaffoldというアドレスにアクセスすると、scaffoldによるページにアクセスできるようになります。
続いてコントローラーの修正をしませう。
heloコントローラーのコンストラクタ(Heloメソッド)内に次の記述を追加しませう。
$this->load->scaffolding('blogs');
このscaffoldingメソッドは、引数に指定したテーブルにアクセスするためのscaffoldをロードする働きをします。
scaffoldを利用するための記述は以上で終わりです。
メソッドで思い出したけど、昔めそ…ゲフンゲフン!!
ヽ l / / r ー -- 、
__ヾWi"i,i'. i
/,. -ー ,,.;;;;;'::"´ ,.> ,- / ‐┬‐ |
// .,,;;';;;;:::: : :  ̄^ハiレ'. ‐┼‐ |
/ / /;;;:;( ̄ ̄ ヽ |... └‐ |
i '、 ;';;;;;;:::  ̄`'' " __i ‐┼‐ i
i. ':、 V;;;;;::::.. ,;;;;、 ( l ‐┼‐ ',
ヽ、 i;;;;;;;;;;;;::`'''゙ ヽ l. -, ;'
l;;;;:;;;::::: :: : ,;;;;、`| ‐┴ .i
l;:::::::: :: `'''゙ l ,―、 ;'
. l::::: ,ゝ-ヘ 〈 r" / ノ ノ
';:::;/::::::;:、-゙ー' l. o /
,. ‐- 、...,,_ ,,.;V:::::/ヾ::. -=',_ /:;ヽ,
';;;:::::::::;':::/;:::::.... .. .. ````"''ナ'::::::i:::::':、
::... ;;;::::::::i:::/';`ヾ、::::::::::::::::::::::::::........ ,.. -'":::::::::::::l::::::::::':、
、::.. ,;;:::::;;ノ:/ ',::::::ヾ:``''''――::::'''''";;;;;;;;;;;:::ノ::::::::'::::::::::::::
..'、::. --=';:::ノ ',:::::::::\::::'ヾ::::::::::`` ̄ ̄::::::::;;;:::::::::::::::::::::
ヾ;:;;:...::. i;;" ';:::::::::::::\::::ヾ、::::::::::::::::::::::::;;;;:::::::::::::::::::::::
〉;;::. i, ';:::::';::::::::::ヾ:::::::'::::、:::::::::::::::::::::::::::::::::::::::::::
であ実際に使って見ませう。
とりあえずhttp://localhost/igniterapp/helo/myscaffold へアクセスヽ( ^ω^)ノ サクセス!
このように、scaffoldでは「一覧表示」「新規作成」「レコード更新」「削除」といった基本機能が全部搭載されています。便利。
テスト用にレコードを入れるというときにも使えます。まぁあくまでレコードのツールなんでXAMPPな人はDBとかテーブルは別途PHPMyAdminで作る必要があります。
使用後は$this->load->scaffolding('blogs');をコメントアウトすればOK。
ま、あくまで臨時のDB管理機能ということで。
次はモデルの説明に移りますYO
ノ)
ハ,,ハ_ / ノ
( ゚ω゚)' ./ セクシーにお断りします
( -、 ~⌒`つ
。 。
/ / ポーン!
( Д )
* * * *
* * * * * *
* * * *
パーン!
( Д )
とりあえずモデルがなくともDBへの接続ができてしまうわけですが、あまりにいろいろなアクセス処理が必要になると、その都度いちいちアクセスのためのための処理を書いていてはアレすぎます。
なのでDB処理もまとめてしまい、使う毎に呼び出すようにすればイイのですぉ。
というわけでモデルの核心部分、というかモデルをちゃんと扱っていきますYO
DBにアクセスして必要な処理を行うメソッドをモデルクラスに用意しておき、それをコントローラーから使用するという方法で。
でぁモデルの作成からいきまっしょい
モデルは『application』フォルダの『models』フォルダの中に用意します。名前はblogs_model.phpで。
blogs_model.php
<?php
class Blogs_model extends Model{
function Blogs_model(){
parent::Model();
}
}
?>
これは…と思うかも知れませんがコントローラーの時と一緒です。ファイル名は全部小文字、ファイル名と同じで
頭文字のみ大文字のクラス名、クラス名と同じメソッドでコンストラクタ作成。手順はまったく同じ。
モデルクラスの場合はModelクラスを継承して作ります。ちなみに継承とかオブジェクト指向関連はJava関連書物か何かで解説されているっぽいので興味(もしくはシラネって人)ある人はネットなり書籍なりで調べていただければ。ちなみに中の人は概念はわかったがよく理解していない(要はわかっていないorz)。
フレームワーク勉強し始めてようやくちょいとわかってきた…のかな(´Д`;)とりあえず実際にモノ作らなきゃ理解できない概念の様ですorz
とりあえずモデルの基本ともいええうコンストラクタ部分は生成したので実際にメソッドを追記して機能を追加していきませう。
コントローラーのindexメソッドのほうで全レコードを取得する際に$db->getを用いますが、これをget_allrecordsというメソッドにまとめます。
モデルでまとめ用のメソッドget_allrecordsを追加します。
blogs_model.php
function get_allrecords()
{
$query = $this->db->get('blogs');
return $query->result_array();
}
全部のレコードを取得するメソッドの作成完了。
続いてコントローラーのほうのindexメソッドの修正にかかりませう。
『controllers』の「helo.php」に次のメソッドを編集(゚д゚)クワッ
(´Д`;)だいぶごちゃごちゃしてきたな…helo.phpでもまだ甘いか。
helo.php
function index(){
$data = array('head_title'=>'index','content'=>'index');
$data['records'] = $this->db->get('blogs')->result_array();
$this->load->view('layout/mylayout',$data);
}
これを
function index(){
$data = array('head_title'=>'index','content'=>'index');
$this->load->model('Blogs_model','blogs');
$data['records'] = $this->blogs->get_allrecords();
$this->load->view('layout/mylayout',$data);
}
へ書き換え。赤字部分がかわってますぇ。
コントローラーでのモデル使用は次の通り。
モデルのロード。
$this->load->model('モデルクラス','名前');
第一引数で使用するモデルクラス名、第二引数でこのコントローラーに用意するときの変数名を指定します。
例だとblogsという変数名。
実際に$this->blogs->allrecords()で、モデルのblogsクラスのallrecordsメソッドを呼んでいます。
これにより先に設定したモデルでの全クエリー取得が発動するわけです。
,, -'" `V `‐、
/ \
./ \
/ ヽ
./ / l ヽ
/ / / / ./ / l | .l .lヽ
| l. l / / / ./ .l | | l / / l l.〉 ∧∧∧∧∧∧∧∧∧∧∧∧
l、 | | l / / ./ ./ |. l | ./ ./ ./ | |./ < >
l、| | l // ///| l / / //// / / .< 罠カード発動!!!! .>
l、l | /l///_/ l / //_|/_∠| / | / .< >
/⌒ヽ | \ `ー' ゝl // `ー' /|/⌒v' < ずっと全クエリ取得! >
| l⌒l l|  ̄ ̄"//|〉 ̄ ̄ ̄ .|/^_l.l < >
ヽゝ(ー| /| ´ \| ll ),l'ノ ∨∨∨∨∨∨∨∨∨∨∨∨
lヽ_ / | ┌───7 /._/
.l/ | l ̄ ̄ ̄/ / / ,ノ!
/ |.. V´ ̄∨ ./ /,.-‐'" .|
./ (;;) |\ `ー‐'´ / / |
| _|_\ /| ./ |
(| ,.-‐'" | \__/ .|/ _,.-─;
|/ .(;;) |─────┤ _,.-‐'":::::::::/
 ̄ |::::::::::::::::::::::::::::::|^l::::::::::::::::::/
{
$query = $this->db->get('blogs');
return $query->result_array();
}
|. ||| .|
,へ. |. ||| | ./゙l ./
``‐ 、_ .iヽ .l \ | | / .| /l/
、 ` ‐、 .|. \l \ | .| ./ |/ .|〃〃
. ゙ヽ、 `゙‐;l\|. │ \| .l/ .| ||| |〃./
\ ゙ヽ、 ミ l. | ||| .| ||| ヽ. / ||| |. ||| .l/
\ ゙ヽ、.l ||| | ||| .| ||| |ミヾ丶 ヽ /,,",- '"´| . ||| . l. ||| .l
\, `| ||| | ||| .| ||| |:: `゙`‐-、V〃" :::::::::l . ||| . l. l
""´~ ̄ _| |||..| ./. │:: :::::l、 l. l__ .∧∧∧∧∧∧∧∧∧∧
,,.: -‐''"´ ̄ ./ / ./:: ::::::::l、 .|____ .< >
三三三 / / . ∠_:: ::::::::::::::l、 < 罰ゲーム!! >
────/ヽ/ | ||| |ー-`ニ::、、_:::::::::::::::::::::::::::::_;;ニ-\____ < >
゙ヽ、 //ヽ| ||| | ||| |、 ○ ノ i`‐、::::::::::,:‐''/ !、○ ノ /::;l/‐゙iヽ < ──挿入位置ずれ──>
゙ヽ. l l/ゝ| ||| |...||| | `‐-‐'´ l:: ::: / `ー-'" /::::l/ / l. ) < >
. \\ー,| ||| |. `iヽ--──- :::::::::::::::::ー─---一丶i‐-,"///< >
. \\| | . |:: ::::::::: |〉:::::::::::::: :::::::::::::::;l ),ノ/ < Fatal error: ! >
、 ̄ ̄ ̄ ̄ | | |:: :::::::;l-‐'´ ̄ ̄ < >
. `` ‐ 、 l |. |: ,.-─‐-、 :::;l ∨∨∨∨∨∨∨∨∨∨
`` ‐、 l || | i' ̄ ̄ ゙̄i ::::;!
゙ヽl. |.l. |、 l,.-─‐-、l ./ .,. ‐'´
l. |、!. | `‐:、 ヽ、_,,ノ ,.‐" , ‐'´
.i--─l.│.l . |、. |`゙ ‐、 .,.‐´| ,‐'"─‐--i
| | l | . l. | `‐,|. ``ヽ、.__,. ‐'´ .|,/ | |
.|(l ∥ . l.| l`‐- 、____ _,, -‐"! |)|
_| | | .l| (;) | ____l´ (:) | |
,ヘ,. -‐''"´ l | |../l. | !___ _,|`ヽ... l |
''"´ .|(l. ,:-‐(..(`゙‐ 、|____l_,, -‐"/‐l )-;. |)|
∧ ガラッ ∧
(.,,゚Д|゚д゚)っ|゚)<中の人などいない!
∧∧ピシャッ
(.,,゚Д|゚)Σ
例によって『views』のindex.phpを変更。
index.php
<h1>Blog一覧</h1><p>テーブルの一覧です。</p>
<table>
<tr>
<th>ID</th>
<th>DATA</th>
<th>TITLE</th>
</tr>
<?php foreach ($records as $row): ?>
<?="<tr><td>{$row['id']}</td>" ?>
<?="<td>".date('Y/m/d'.$row['timestamp'])."</td>" ?>
<?="<td>{$row['title']}</td>" ?>
<?="<td>{$row['content']}</td></tr>" ?>
<?php endforeach; ?>
</table>
$data = array('head_title'=>'index','content'=>'index','records'=>array());
if($this->input->post('find') != null){
$find = $this->input->post('find');
$this->load->model('Blogs_model','blogs');
$data['records'] = $this->blogs->get_findrecords($find);
}
$this->load->view('layout/mylayout',$data);
}
$sql = "SELECT * FROM blogs WHERE title like ? OR content like ?";
$query = $this->db->query($sql,array("%{$str}%","%{$str}%"));
}
(゚∀゚)と入力。もしコンテンツかタイトルに(゚∀゚)が含まれていれば表示される…はず。
ちなみにデフォ状態では(未検索時)下のレコード欄は空です。
一覧見るにはhttp://localhost/igniterapp/helo/ へアクセスしなきゃいけないから困る。
まぁいいけど。
とりあえずモデル編(おまけ)はこれにて終了。
(゚ω゚)次回以降はバリデーションについて扱っていきますYO!!
( ゚ω゚)ノシ TO BE CONTINUED!!






