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 查询某字段中以逗号分隔的字符串的包含查询和关联查询实现

mysql 查询某字段中以逗号分隔的字符串的包含查询和关联查询实现

MYSQL查询某字段中以逗号分隔的字符串的方法

Laravel Eloquent与逗号分隔字段的关系

laravel怎么取出多对多关联表的一个字段,组成一个数组

mysql字段存的有逗号隔开 取出来怎么分割了输出