これを表現する最良の方法がわからないので、我慢してください。
Codeigniter内では、オブジェクトのレコードセットを問題なく返すことができますが、これは「モデル」オブジェクト(たとえば、ページオブジェクト)としてではなくstdClassオブジェクトとして返され、そのモデル内の他のメソッドを利用するために使用できます。
私はここでトリックを逃していますか?それとも、これはCI内の標準機能ですか?
これを表現する最良の方法がわからないので、我慢してください。
Codeigniter内では、オブジェクトのレコードセットを問題なく返すことができますが、これは「モデル」オブジェクト(たとえば、ページオブジェクト)としてではなくstdClassオブジェクトとして返され、そのモデル内の他のメソッドを利用するために使用できます。
私はここでトリックを逃していますか?それとも、これはCI内の標準機能ですか?
はい、基本的にこれを機能させるには、モデルオブジェクトのプロパティをクラス全体で宣言し$this
、現在のモデルオブジェクトであることを参照する必要があります。
class Blogmodel extends CI_Model {
var $title = '';
var $content = ''; // Declare Class wide Model properties
var $date = '';
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_entry()
{
$query = $this->db->query('query to get single object');
$db_row = $query->row(); //Get single record
$this->title = $db_row->title;
$this->content = $db_row->content; //Populate current instance of the Model
$this->date = $db_row->date;
return $this; //Return the Model instance
}
}
get_entry()
オブジェクトタイプが返されると思いますBlogmodel
。
次のようなsthは必要ありません。
$this->title = $db_row->title; $this->content = $db_row->content; //Populate current instance of the Model $this->date = $db_row->date;
result()メソッドurモデルに入れるだけです:
result(get_class($this));
また
result(get_called_class());
そして、あなたはurモデルのインスタンスを取得します!
この問題に対する私の解決策は、jondavidjohnの回答とmkoistinenのコメントの組み合わせで構成されていました。
CodeIgniterのドキュメントによると:
結果オブジェクトごとにインスタンス化するクラスを表す文字列をresult()に渡すこともできます(注:このクラスをロードする必要があります)
その知識を身につければ、jondavidjohnのソリューションを次のように書き直すことができます。
class Blogmodel extends CI_Model {
var $title = '';
var $content = ''; // Declare Class wide Model properties
var $date = '';
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_entry()
{
$query = $this->db->query('query to get single object');
$blogModel = $query->row('Blogmodel'); //Get single record
return $blogModel; //Return the Model instance
}
}