<?phpnamespaceApp\Utility;useCake\I18n\Time;useCake\ORM\TableRegistry;useCake\Utility\Inflector;functionqueryToConditions($model,$query){$modelAlias=$model->alias();$conditions=[];foreach($queryas$queryKey=>$queryValue){if(!empty($queryValue)){try{$columnSchema=$model->schema()->column($queryKey);if($columnSchema){if($columnSchema['type']=='string'){$conditions[$modelAlias.'.'.$queryKey.' LIKE']=$queryValue.'%';}elseif($columnSchema['type']=='datetime'){$timeObject=newTime($queryValue);$conditions[$modelAlias.'.'.$queryKey]=$timeObject->i18nFormat(I18N_SQL_DATETIME);}elseif($columnSchema['type']=='datetime'){$timeObject=newTime($queryValue);$conditions[$modelAlias.'.'.$queryKey]=$timeObject->i18nFormat(I18N_SQL_DATETIME);}elseif($columnSchema['type']=='json'){$conditions[$modelAlias.'.'.$queryKey.' LIKE']=$queryValue.'%';}else{$conditions[$modelAlias.'.'.$queryKey]=$queryValue;}}}catch(\Exception$e){// Do nothing...}}}foreach($model->associations()as$association){if(is_a($association,'Cake\ORM\Association\BelongsTo')||is_a($association,'Cake\ORM\Association\HasOne')){$associationName=Inflector::singularize($association->name());if(!empty($query[$associationName])){$associationTable=TableRegistry::get($association->name());$conditions+=queryToConditions($associationTable,$query[$associationName]);}}}return$conditions;}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.