前々回、「FuelPHP入門」のブログサンプルが動かないって騒いでた。
→Call to a member function order_by() on a non-object[FuelPHP入門]
ウダウダ色々試してたら動くようになった
モデルもコントローラもミスってた。
バージョンの違いによるものもあったけど、自分がアホやったなー。
1.Templateコントローラ
Templateコントローラについては以前やらなかったっけ?って思って過去記事あさったら中途半端に調べてた。
FuelPHPのテンプレートコントローラについて1[FuelPHP入門][はじめてのフレームワークとしてのFuelPHP]
1を書いたってことは 2を作る予定だったんだな、過去の俺。
FuelPHP1.7のTemplateコントローラを使う場合、before()とafter()メソッドを記述しなければならない。
・・・まあ、なくても動いたんだけど。
public function before() { parent::before(); // この行がないと、テンプレートが動作しません! // 何かする } public function after($response) { $response = parent::after($response); // あなた自身のレスポンスオブジェクトを作成する場合は必要ありません。 // do stuff return $response; // after() は確実に Response オブジェクトを返すように }
2.Ormモデル
今回の本題。
Ormモデルの理解が不足してたから詰まってた。
厳密にはコントローラからモデルを呼び出す部分。
find()メソッドの指定について。
今までのはこう。
$data['articles'] = Model_Article::find('all')->order_by('id', 'desc')->get();
修正版はこう。
find()メソッド内に「’all’」と入れてる。どうやら指定しないとダメらしい。
$data['articles'] = Model_Article::find('all');
もしくは query()メソッドを使う。
こっちが参考書の書き方に近いのかな。
$data['articles'] = Model_Article::query() ->order_by('id', 'desc') ->get();
ただ、これにorder_by()メソッドをメソッドチェーンでつなげるとダメだった。
この辺、調べなければ。
参考
Template コントローラ – 概要 – FuelPHP ドキュメント
コメント
自分もWebサービスを作ってる者です。
以前、同じ所でつまずきました。
$data[‘hoge’] = Model_Hoge::find(‘all’, array(
‘order_by’ => array(‘id’ => ‘DESC’),
‘limit’ => $this->per_page,
‘offset’ => Pagination::get(‘offset’),
));
こんな感じでやりました。
mankindさん
コメントありがとうございます!
引数にorder_byをセットするやり方ですね。
参考にさせて頂きます。