2013.
06.
25
23:38:08
結論から言えば
の取得結果と
の取得結果を合体したものがfind()で取得するカラムらしいです。
例えばこんなORMモデルを作ったとしてφ(--)
コントローラとかで
を実行すると、結果は
になって
の実行結果が
になって、
の結果が
になります。
プライマリキー「pk_id」が後からくっついているので、
・column_varchar01(プロパティ)
・column_int02(プロパティ)
・column_varchar02(プロパティ)
・pk_id(プライマリキー)
の並び順ですね。
ちなみに「$_properties」に「pk_id」を含めて
にすると
の結果は
になります。
プロパティの並び順に従って
・pk_id(プロパティ)
・column_varchar01(プロパティ)
・column_int02(プロパティ)
・column_varchar02(プロパティ)
の順番になり、プライマリキー「pk_id」は既にあるので無視されます。
きちんと中を理解したい方は
の
から
の
に飛んで、そこから更に
に飛んで、その中の
と
あたりがゴールですので頑張って見てやってください。
取りあえず、完了\(--)/
[\Orm\Modelを継承したモデル名]::properties();
の取得結果と
[\Orm\Modelを継承したモデル名]::primary_key();
の取得結果を合体したものがfind()で取得するカラムらしいです。
例えばこんなORMモデルを作ったとしてφ(--)
<?php
class Model_Test02 extends \Orm\Model
{
//使用するtable
protected static $_table_name = "tbl_test01";
//プライマリキー
protected static $_primary_key = array('pk_id');
//フィールド名
protected static $_properties = array(
'column_varchar01',
'column_int02',
'column_varchar02'
);
}
class Model_Test02 extends \Orm\Model
{
//使用するtable
protected static $_table_name = "tbl_test01";
//プライマリキー
protected static $_primary_key = array('pk_id');
//フィールド名
protected static $_properties = array(
'column_varchar01',
'column_int02',
'column_varchar02'
);
}
コントローラとかで
var_dump(Model_Test02::properties());
を実行すると、結果は
array(3) {
["column_varchar01"]=>
array(0) {
}
["column_int02"]=>
array(0) {
}
["column_varchar02"]=>
array(0) {
}
}
["column_varchar01"]=>
array(0) {
}
["column_int02"]=>
array(0) {
}
["column_varchar02"]=>
array(0) {
}
}
になって
var_dump(Model_Test02::primary_key());
の実行結果が
array(1) {
[0]=>
string(5) "pk_id"
}
[0]=>
string(5) "pk_id"
}
になって、
var_dump(Model_Test02::find('first'));
の結果が
object(Model_Test02)#24 (10) {
(中略)
["_data":protected]=>
array(4) {
["column_varchar01"]=>
string(9) "あああ"
["column_int02"]=>
string(2) "10"
["column_varchar02"]=>
string(9) "いいい"
["pk_id"]=>
string(1) "1"
}
(中略)
}
(中略)
["_data":protected]=>
array(4) {
["column_varchar01"]=>
string(9) "あああ"
["column_int02"]=>
string(2) "10"
["column_varchar02"]=>
string(9) "いいい"
["pk_id"]=>
string(1) "1"
}
(中略)
}
になります。
プライマリキー「pk_id」が後からくっついているので、
・column_varchar01(プロパティ)
・column_int02(プロパティ)
・column_varchar02(プロパティ)
・pk_id(プライマリキー)
の並び順ですね。
ちなみに「$_properties」に「pk_id」を含めて
<?php
class Model_Test02 extends \Orm\Model
{
//使用するtable
protected static $_table_name = "tbl_test01";
//プライマリキー
protected static $_primary_key = array('pk_id');
//フィールド名
protected static $_properties = array(
'pk_id',
'column_varchar01',
'column_int02',
'column_varchar02'
);
}
class Model_Test02 extends \Orm\Model
{
//使用するtable
protected static $_table_name = "tbl_test01";
//プライマリキー
protected static $_primary_key = array('pk_id');
//フィールド名
protected static $_properties = array(
'pk_id',
'column_varchar01',
'column_int02',
'column_varchar02'
);
}
にすると
var_dump(Model_Test02::find('first'));
の結果は
object(Model_Test02)#24 (10) {
(中略)
["_data":protected]=>
array(4) {
["pk_id"]=>
string(1) "1"
["column_varchar01"]=>
string(9) "あああ"
["column_int02"]=>
string(2) "10"
["column_varchar02"]=>
string(9) "いいい"
}
(中略)
}
(中略)
["_data":protected]=>
array(4) {
["pk_id"]=>
string(1) "1"
["column_varchar01"]=>
string(9) "あああ"
["column_int02"]=>
string(2) "10"
["column_varchar02"]=>
string(9) "いいい"
}
(中略)
}
になります。
プロパティの並び順に従って
・pk_id(プロパティ)
・column_varchar01(プロパティ)
・column_int02(プロパティ)
・column_varchar02(プロパティ)
の順番になり、プライマリキー「pk_id」は既にあるので無視されます。
きちんと中を理解したい方は
fuel/packages/orm/classes/model.php
の
public static function find($id = null, array $options = array())
{
(中略)
}
{
(中略)
}
から
fuel/packages/orm/classes/query.php
の
public function get()
{
(中略)
}
{
(中略)
}
に飛んで、そこから更に
public function select($add_pks = true)
{
(中略)
}
{
(中略)
}
に飛んで、その中の
$fields = array_keys(call_user_func($this->model.'::properties'));
と
$pks = call_user_func($this->model.'::primary_key');
foreach($pks as $pk)
{
if ( ! in_array($this->alias.'.'.$pk, $this->select))
{
$this->select($pk);
}
}
foreach($pks as $pk)
{
if ( ! in_array($this->alias.'.'.$pk, $this->select))
{
$this->select($pk);
}
}
あたりがゴールですので頑張って見てやってください。
取りあえず、完了\(--)/