荆轲刺秦王
先看一下表结构:
最终结果要第一张表的数据,第一张表的 data 中的字段对应的是 key ,业务需要的是第二张表的 name
先看需要引入的文件:主要是model文件
use Illuminate\Support\Facades\DB; use App\Model\SystemEvent; use App\Model\SystemEventParam; use Lib\PublicClass\S;然后看第一种解决方案:
public function getEventData() { $list = SystemEvent::from('system_event')->where('status', 1)->select(); $list = $list->get()->toArray(); $nameList = SystemEventParam::from('system_event_param')->pluck('key','name'); if (empty($list)) S::error(40005); foreach ($list as $key => $val){ foreach ($nameList as $k => $v){ $arr = explode(",",$val['data']); if( in_array($v,$arr) ){ $list[$key]['res'][$v] = $k; } } } return $list; }打印出来的结果:
{ "id": 1, "name": "用户注册", "display_name": "用户注册", "status": 1, "data": "third_member_id,level_name,usable_point", "created_time": "2020-08-26 11:26:32", "updated_time": "2020-08-27 14:21:55", "res": { "third_member_id": "会员卡卡号", "level_name": "会员等级名称", "usable_point": "剩余积分" } }以上只是举例,所以只拿了一条数据。
然后看第二种解决方案:
public function getEventDataSql() { $list = DB::select("SELECT se.*,GROUP_CONCAT(sep.name) AS param FROM system_event se LEFT JOIN system_event_param sep ON FIND_IN_SET( sep.key,se.data )GROUP BY se.id"); if (empty($list)) S::error(40005); return $list; }打印出来的数据:
{ "id": 1, "name": "用户注册", "display_name": "用户注册", "status": 1, "data": "third_member_id,level_name,usable_point", "created_time": "2020-08-26 11:26:32", "updated_time": "2020-08-27 14:21:55", "param": "会员卡卡号,会员等级名称,剩余积分" }同样也只是拿出了一条数据,实际上可以拿出来很多条的。
