Laravel MySQL查询中如何调用可变列名(避免重复if-else)
动态构建查询字段实现多场景适配
问题背景
当$case为'private'时,$langtitle赋值为'title';其他情况(政府场景)赋值为'title_gov'。需要实现:
- 政府场景:查询
$langtitle(即title_gov)、id和title字段 - 私有场景:仅查询
title字段
要求不通过if-else控制整个查询语句,用变量方式实现。
实现方法
可以通过动态构建查询字段数组的方式,让查询逻辑保持统一,仅通过数组内容适配不同场景:
步骤1:简化$langtitle赋值(可选)
用三元表达式替代原if-else,代码更简洁:
$langtitle = $case === 'private' ? 'title' : 'title_gov';
步骤2:动态生成查询字段数组
方法一:基础数组+条件追加
// 初始化私有场景的基础字段 $selectFields = ['title']; // 政府场景追加额外字段 if ($case !== 'private') { $selectFields[] = $langtitle; $selectFields[] = 'id'; } // 统一执行查询 $images = Images::select($selectFields) ->groupBy('id') ->paginate(10);
方法二:数组合并式(更简洁)
$langtitle = $case === 'private' ? 'title' : 'title_gov'; // 根据场景合并字段数组 $selectFields = array_merge( ['title'], $case !== 'private' ? [$langtitle, 'id'] : [] ); // 统一查询逻辑 $images = Images::select($selectFields) ->groupBy('id') ->paginate(10);
两种方法都能避免拆分查询语句,仅通过$selectFields变量的动态内容来适配不同场景的字段需求。
内容的提问来源于stack exchange,提问作者Anonymous Girl
相关产品推荐
相关产品推荐

