<?php

class Model_Employee extends \Orm\Model
{
	protected static $_properties = array(
		'id',
		'family_name',
		'given_name',
		'family_kana',
		'given_kana',
		'aff_id',
		'pos_id',
		'picture_url',
		'comments',
		'has_been_deleted',
		'number_of_editing',
	);

	protected static $_table_name = 'employee';
	protected static $_belongs_to = array(
		'affiliation' => array(
			'key_from' => 'aff_id',
			'model_to' => 'Model_Affiliation',
			'key_to' => 'id',
		),
		'position' => array(
			'key_from' => 'pos_id',
			'model_to' => 'Model_Position',
			'key_to' => 'id',
		)
	);

	/**
	 * 検索条件を元に
	 * @param config 検索条件の配列
	 * @param
	 * @param
	 * @return 結果を、カラム名をキーとした連想配列で返す
	 *
	 */
	public static function find_with_pagination($affi, $yakushoku){
		$query = self::forge();
		$query->where('aff_id', $affi)
		->where('pos_id', '>', $yakushoku)
		->count();
		return $query;
	}

	/**
	 * 人数制限バリデーション用
	 */
	public static function get_count_column($affi, $yakushoku){
		$query = self::forge();
		$query->where('aff_id', $affi)
		->where('pos_id', '>', $yakushoku)
		->count();
		return $query;
	}

// 	/**
// 	 * idを指定して1件更新(論理削除or更新して登録)
// 	 */
// 	public static function save_one($emp_id){

// 		$entry = Model_Employee::find($emp_id);
// 		if(!empty($entry)){

// 		}
// // 		try{
// // 			if()
// // 		}
// // 		catch{

// // 		}
// 		$entry = Model_Employee::find($emp_id);
// 		$entry->delete();
// 	}


	/**
	 * idを指定して1件更新(論理削除or更新して登録)
	 */
	public static function delete_emp($emp_id){
	// var_dump();
	// try{
	// 	$entry = Model_Employee::find($emp_id);
	// 	$entry->set(
	// 		array(
	// 			'has_been_deleted'  => 0,
	// 		)
	// 	)->save();
	// 	var_dump('$entry');
	// 	var_dump($entry);
	// 	}
	//
	// 	catch(Exception $e){
	// 		echo $e->getMessage();
	// 	}


	}

	/**
	 * idを指定して1件取得
	 */
	public static function get_emp($emp_id){

		$entry = Model_Employee::find($emp_id);
		//var_dump($entry);
		if(! empty($entry)){
			return $entry;
		}
		else{
			//http://fuelphp.jp/docs/1.7/general/hmvc.htmlここ見る
			//404エラーを返したい
		}
	}

	/**
	 * idを指定して1件更新(新規登録or編集分更新)
	 */
	public static function save_emp($data, $emp_id = null){
		if(!empty($emp_id)){
			//編集の場合
			var_dump('編集');
			var_dump($data);
			$entry = Model_Employee::find($emp_id);
		}else{
			//新規登録の場合
			var_dump('新規登録');
			//var_dump($data);
			$entry = Model_Employee::forge();
			var_dump($entry);
		}
		$entry->set($data)->save();
		var_dump('aiuedasd');
	}

}

<?php
class Model_Position extends \Orm\Model
{
	protected static $_table_name = 'position'; //テーブル名が複数形でないので必要
	//protected static $_primary_key = array('aid'); //プライマリーキーがid(デフォに合致)なので不要

	protected static $_properties = array(
		'id',
		'pos_name' => array(
			'data_type' => 'varchar',
		),
		'sorting' => array(
			'data_type' => 'int',
		)
	);

	// positionに属しているModel_employeeで
	protected static $_has_many = array(
		'position' => array(
			'key_from' => 'id',
			'model_to' => 'Model_Employee',
			'key_to' => 'pos_id',
		)
	);
	protected static $pos_name_to_num = array(
		 array(
			'部長'     => '1',
			'model_to' => '2',
			'key_to'   => '3',
			)
	);

	/**
	 * プルダウン生成用の値一覧を取得する
	 * @ return array
	 */
	public static function get_pulldown_list(){
		$pos_list = DB::select ('id', 'pos_name')->from ( 'position' )->distinct(true)->execute();
// 		var_dump('プルダウン');
// 		var_dump($pos_list);
		return array(
			'pos_list' => $pos_list,
		);
	}

	/**
	 * 役職(日本語)→posidに変換
	 * @param 変換対象となる役職名
	 * @ return array
	 */
	public static function pos_name_to_num($target){
	//public static function pos_name_to_num(){

		$pos_list = DB::select ('id', 'pos_name')->from ( 'position' )->distinct(true)->execute();
// 		var_dump('変換対象');
// 		var_dump($target);
		//array (size=2)
		//1 => string '部長' (length=6)
		//2 => string '課長' (length=6)
		//のような、変換対応表を作る
		$pos_name_to_num_list = array();
		foreach($pos_list as $key => $value){
			$pos_name_to_num_list += array(
			$value['pos_name'] => $value['id'],
			);
		}
		var_dump($pos_name_to_num_list);
		if (array_key_exists($target, $pos_name_to_num_list)) {
// 			echo "hitしました";
// 			var_dump($pos_name_to_num_list[$target]);
			return $pos_name_to_num_list[$target];
		}
		else{
			//404処理?該当する役職が見つからないとき
		}
	}

}


<?php
class Model_Affiliation extends \Orm\Model
{
	//部 department
	//課 section
	//係 subsection
	protected static $_table_name = 'affiliation';
	//テーブル名が複数形でないので必要
	//protected static $_primary_key = array('aid'); //プライマリーキーがid(デフォに合致)なので不要

	protected static $_properties = array(
		'id', // PKではバリデーション、型、オブザーバは無視されます
		'dep_name' => array(
			'data_type' => 'int',
		),
		'sec_name' => array(
			'data_type' => 'int',
		),
		'subsec_name' => array(
			'data_type' => 'int',
		),
		'sorting' => array(
			'data_type' => 'int',
		)
	);


	// affiliationに属しているModel_employeeで
	protected static $_has_many = array(
		'affiliation' => array(
			'key_from' => 'id',//自分のキー
			'model_to' => 'Model_Employee',//相手テーブル
			'key_to' => 'aff_id',
		)
	);

	public function get_affi_list(){
		$list = Model_Affiliation::find('all');
		return $list;

	}

	/**
	 * プルダウン生成用の値一覧を取得する
	 * @ return array
	 */
	public static function get_pulldown_list(){
		$bu_list = DB::select ( 'dep_name' )->from ( 'affiliation' )->distinct(true)->execute();
		$ka_list = DB::select ( 'sec_name' )->from ( 'affiliation' )->distinct(true)->execute();
		$kk_list = DB::select ( 'subsec_name' )->from ( 'affiliation' )->distinct(true)->execute();
		return array(
			'bu_list' => $bu_list,
			'ka_list' => $ka_list,
			'kk_list' => $kk_list,
		);
	}

	/**
	 * 各部署(日本語)→affidに変換
	 * @param 変換対象となる部署名
	 * @ return array
	 */
	public static function each_aff_to_num($dep, $sec = null, $subsec= null){
		//public static function pos_name_to_num(){

	//	$aff_list = DB::select ('dep_name', 'pos_name')->from ( 'affiliation' )->distinct(true)->execute();
		// 		var_dump('変換対象');
		// 		var_dump($target);
		//array (size=2)
// 		echo 'dep';
// 		var_dump($dep);
// 		var_dump($sec);
// 		var_dump($subsec);
		$aff_num = Model_Affiliation::find('last', array(
			'select' => array('id'),
			'where' => array(
				array('dep_name', $dep),
				array('sec_name', $sec),
				array('subsec_name', $subsec),
			),
		));
		//var_dump('$aff_num');
		return $aff_num['id'];
	}
}