Laravel关联查询将一个字段中以逗号分隔的取出来形成新的字段
Posted willem_wg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel关联查询将一个字段中以逗号分隔的取出来形成新的字段相关的知识,希望对你有一定的参考价值。
阅读目录
表结构
system_event 表结构
system_event_param 表结构
需求
最终结果要第一张表的数据,第一张表的 data
中的字段对应的是 key
,业务需要的是第二张表的 name
。
第一种解决方案
引入model文件
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": "会员卡卡号,会员等级名称,剩余积分"
同样也只是拿出了一条数据,实际上可以拿出来很多条的。
以上是关于Laravel关联查询将一个字段中以逗号分隔的取出来形成新的字段的主要内容,如果未能解决你的问题,请参考以下文章
mysql 查询某字段中以逗号分隔的字符串的包含查询和关联查询实现