您当前的位置: 首页 >  ar

知其黑、受其白

暂无认证

  • 2浏览

    0关注

    1250博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Laravel关联查询将一个字段中以逗号分隔的取出来形成新的字段

知其黑、受其白 发布时间:2022-03-22 15:27:57 ,浏览量:2

阅读目录
  • 表结构
    • system_event 表结构
    • system_event_param 表结构
  • 需求
    • 第一种解决方案
    • 第二种解决方案

表结构 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": "会员卡卡号,会员等级名称,剩余积分"
}

同样也只是拿出了一条数据,实际上可以拿出来很多条的。

关注
打赏
1665558895
查看更多评论
立即登录/注册

微信扫码登录

0.1680s