laravel 使用PHP连表查询

/*处理数据关联数据
 * @param array $data 来源源数据
 * @param object $model 关系数据模型
 * @param string  $dataField 来源数据的字段
 * @param string  $dataFieldForm 来源数据字段格式 number,string
 * @param string/array $field 返回的字段
 * @param string  $modelField 匹配的字段
 * @param $orderByField 关系数据排序字段
 * @param $desc 倒叙或者顺序  asc / desc
 * @return array
*/
 function data_related(&$data,$model,$dataField,$modelField,$dataFieldForm="number",$field="relation",$orderByField="",$desc=""){
     if(!$data){
         return false;
     }
     $handle = [];
     foreach($data as &$v){
         $handelField = $v[$dataField];
         unset($v[$dataField]);
         if(!empty($handelField)){
             if($dataFieldForm=='string'){
                 $handle = array_merge($handle,explode(",",$handelField));
                 $v[$dataField]=array_merge($handle,explode(",",$handelField));
             }elseif($dataFieldForm=='number'){
                 $handle[]=$handelField;
                 $v[$dataField]=$handelField;
             }
         }
     }
     if($orderByField&&$desc){
         $relation = $model->whereIn($modelField,$handle)->orderBy($orderByField,$desc)->get();
     }else{
         $relation = $model->whereIn($modelField,$handle)->get();
     }

     if($relation->count()>0){
         $relationData=[];
         $relation = $relation->toArray();
         foreach($relation as $re){
             $relationData[$re[$modelField]]=$re;
         }
         foreach($data as &$v){
             if($v[$dataField]){
                 if(is_array($v[$dataField])){
                     foreach($v[$dataField] as $da){
                         if(isset($relationData[$da])){
				$v[$field][]=$relationData[$da];
} } }elseif(is_numeric($v[$dataField])){ if(isset($relationData[$v[$dataField]])){ $v[$field][]=$relationData[$v[$dataField]]; } } }else{ $v[$field]=[]; } } }else{ foreach($data as &$v){ $v[$field]=[]; } } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值