You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:15:05