通过上层控制器定制链式配置数组,实现所有端的数据获取
这里贴出TP5的实现,希望官方能考虑支持这种配置式做法。
1. model层注入这个traits
<?php
namespace app\common\traits\model;
trait ModelExtension
{
/**
* 根据链式配置数组, 遍历执行链式语句
*
* @param [type] $chains
* @return void
*/
public function setModelByChains($obj=NULL, $chains=[]) {
if(!$obj) {
$obj = $this;
}
if(empty($chains)) {
return $obj;
}
foreach($chains as $_name => $_chain) {
$chainName = strtolower($_name);
$chainArgs = [];
if(is_array($_chain)) {
$chainArgs = $_chain;
}else{
$chainArgs[] = $_chain;
}
call_user_func_array([$obj, $chainName], $chainArgs);
}
return $obj;
}
}2. logic层使用演示 public function getAllCategorys($chains=[]) {
// default chains
$_chains = [
'where' => [
'status', '=', 1
]
];
$_chains = !empty($chains) ? array_merge_recursive($_chains, $chains) : $_chains;
$dataSet = $this->queryDatasByChains($_chains);
return $dataSet;
}3. Controller一般分为好几个端,每个端如果需要特殊定制获取数据,那么自行传入定制的chains,array_merge_recursive会覆盖默认设定的chains 最佳答案