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

荆轲刺秦王

先看一下表结构:

最终结果要第一张表的数据,第一张表的 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": "会员卡卡号,会员等级名称,剩余积分"
}

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值