プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
FuelPHP1.6、ORMモデルでfind()時の取得カラムを理解する。
結論から言えば

[\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'
    );
}


コントローラとかで

var_dump(Model_Test02::properties());

を実行すると、結果は

array(3) {
  ["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"
}

になって、

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"
  }

(中略)

}

になります。
プライマリキー「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'
    );
}

にすると

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) "いいい"
  }

(中略)

}

になります。

プロパティの並び順に従って

・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);
    }
}

あたりがゴールですので頑張って見てやってください。

取りあえず、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:FuelPHP  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事