CodeIgniterユーザーガイドでは、サンプルモデルには、対応するデータベーステーブルの各フィールドの属性がありました。
class Blogmodel extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
//...
ただし、ブログ投稿のセットを返す場合、それらは一般的なオブジェクトにすぎません。
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
各ブログ投稿が一般的なオブジェクトのみになる場合、クラスの最初の属性の目的は何ですか?
各ブログ投稿を、そのコンテンツが入力された本格的なモデルオブジェクトとして用意しておくと便利なようです。次に、内部で値をフェッチするメソッドを記述できます。ただし、ユーザーガイドのすべての例は、各コントローラーが各モデルの1つのインスタンスを持ち、そのオブジェクトを使用してデータベース値を含む汎用オブジェクトをフェッチすることを示しているようです。さらに、例がモデルをインスタンス化する方法($this->load->model('Blog');
)は、コントローラー内にモデルのインスタンスが1つだけあると予想されることは明らかです。
私のブログ投稿にstatus
整数としてデータベースに保存されている値がありますが、いくつかの異なるコントローラーでその値を人間が読める文字列として表示したい場合、その関数/メソッドをどこに配置しますか?複数のコントローラーで必要であり、1つのオブジェクトに固有であるため、モデルオブジェクトのメソッドである必要があると思います。各ブログ投稿がモデルのインスタンスである場合、次のように書くことができます。
function get_human_status()
{
$lookup = array(
1 => 'Active',
2 => 'Hidden',
3 => 'Pending');
return $lookup[$this->status];
}
ただし、各ブログ投稿が汎用オブジェクトである場合は、次のようになります。
function get_human_status($data)
{
$lookup = array(
1 => 'Active',
2 => 'Hidden',
3 => 'Pending');
return $lookup[$data->status];
}
CodeIgniterの慣用句はどちらですか?2番目だとすると、サンプルモデルがこれらの内部属性を定義するのはなぜですか?
最後に、ボーナスポイントについて、この種の他の質問がある場合、どの本、記事、または例を見る必要がありますか?