| 20件目(121件中) |

ポストされたデータを検索条件に変換

固定リンク:#0000000104   投稿者:ZiSTA 日時:2009-12-29 16:48:55   コメント( 0

今日作った便利関数のメモ。$this->dataで受け取ったデータと検索条件テンプレートをもとに検索条件を組み立てます。

		//検索条件のテンプレ($conditionTemplate)
		/*
		$conditionTemplate = array(
		'field'=>'使用するポストデータのフィールド名',
		'query'=>'クエリ左辺',
		'replace'=>'クエリ右辺置換用テンプレート')
		*/
		//'value'=>'デフォルト値'必要?
	var	$conditionTemplate = array(
			array('or'=>array('field'=>'Report.name','query'=>'Report.name LIKE ','replace'=>'%%%s%%'),
			array('field'=>'Report.name','query'=>'Report.body LIKE ','replace'=>'%%%s%%')),
			array('field'=>'Report.draft_flag','query'=>'Report.draft_flag'),
			array('field'=>'Report.type_id','query'=>'Report.type_id'),
			array('field'=>array('Report.date_from','Report.date_to'),'query'=>'DATE(Report.modified) BETWEEN DATE(?) AND DATE(?)'),
		);

	function _postToConditions($postData,$conditionTemplate){
		$conditions = array();	
		foreach($conditionTemplate as $cond){
		 	if(key($cond)=='or'){
		 		$c = $this->_postToConditions($postData,$cond);
		 		if(!empty($c))$conditions['or']=$c;
				continue;
		 	}
			if(is_array($cond['field'])){
				foreach($cond['field'] as $field){
					$value = Set::extract($field,$postData);
					$fields[] =empty($value)?'': $value;
				}
				if(strlen(implode('',$fields))>0)$conditions[$cond['query']]=$fields;
			}else{
				$value = Set::extract($cond['field'],$postData);
				if($value!==NULL){
					if(!empty($cond['replace']))$value = sprintf($cond['replace'],$value);
					$conditions[$cond['query']]=$value;
				}
			}

		}	
		return $conditions;		
	}
 

コメント

| 20件目(121件中) |
↑ ページトップ