Laravel Eloquent查询时如何为select结果添加自定义payment_type字段
解决方案
以下两种方法都可以实现需求:
方法1:查询阶段直接添加字段(推荐,性能更高)
直接在select语句中通过数据库原生操作新增固定值的payment_type字段,不需要后续PHP遍历处理,适合数据量较大的场景:
// 注意顶部需要引入DB门面:use Illuminate\Support\Facades\DB; $q1 = DB::connection('mysql_live')->table('transactions_vk')->where('user_id', $userid)->where('amount', '!=', '0')->where('payed', 'Yes') ->select('type', 'id', 'package', 'payed', 'amount', 'date_modified as date_added', 'payed as chargeid', DB::raw("'VK' as payment_type"))->get(); $q2 = DB::connection('mysql_live')->table('transactions_stripe')->where('user_id', $userid)->where('amount', '!=', '0')->where('payed', 'Yes') ->select('type', 'id', 'package', 'payed', 'amount', 'date_added', 'charge_id as chargeid', DB::raw("'Stripe' as payment_type"))->get(); $total1 = $q1->merge($q2);
方法2:集合遍历添加属性(灵活度高)
如果需要搭配额外的自定义逻辑判断,可以拿到查询结果集合后,通过each方法批量添加属性:
$q1 = DB::connection('mysql_live')->table('transactions_vk')->where('user_id', $userid)->where('amount', '!=', '0')->where('payed', 'Yes') ->select('type', 'id', 'package', 'payed', 'amount', 'date_modified as date_added', 'payed as chargeid')->get(); // 给VK查询结果批量加支付类型标识 $q1->each(function ($item) { $item->payment_type = 'VK'; }); $q2 = DB::connection('mysql_live')->table('transactions_stripe')->where('user_id', $userid)->where('amount', '!=', '0')->where('payed', 'Yes') ->select('type', 'id', 'package', 'payed', 'amount', 'date_added', 'charge_id as chargeid')->get(); // 给Stripe查询结果批量加支付类型标识 $q2->each(function ($item) { $item->payment_type = 'Stripe'; }); $total1 = $q1->merge($q2);
因为DB查询默认返回的是stdClass对象,直接挂载属性不需要额外配置,两种方法最终得到的合并集合都完全符合你要求的输出格式。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

