雄辩 |添加自定义值以选择
Posted
技术标签:
【中文标题】雄辩 |添加自定义值以选择【英文标题】:Eloquent | Add a custom value to select 【发布时间】:2021-11-08 16:54:30 【问题描述】:我有多个表,它们都保存着不同的交易数据,这里是一个例子:
$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();
$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();
$total1 = $q1->merge($q2);
我将它们全部查询并将它们合并为一个结果。当我查询它们时,我知道它们是哪种支付类型,在我的示例中,q1 都是 VK 交易,q2 都是条带交易。
有没有办法在此处添加此信息?
类似于payment_type: VK
用于第一季度和payment_type: Stripe
用于第二季度?
因此结果数组将包含每个项目的此信息,项目将如下所示:
amount: 8999
chargeid: "pi_chargeid"
date_added: "2021-09-10 10:47:29"
id: 70
package: 31
payed: "Yes"
type: "credits"
payment_type: "VK"
amount: 2495
chargeid: "123456789"
date_added: "2016-09-19 17:15:43"
id: 70405
package: 11
payed: "No"
payment_type: "Stripe"
【问题讨论】:
【参考方案1】:您可以做一些小技巧来在选择中添加一列,就像在纯 SQL 中一样:
$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);
更新:您的查询似乎与联合兼容,因此您可以通过以下方式为自己节省查询:
$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'"));
$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'"));
$total1 = $q1->union($q2)->get();
【讨论】:
【参考方案2】:在您的情况下,您可以编写这样的代码。
$q1 = DB::connection('mysql_live')->table('transactions_vk')->where('user_id', $userid)->where('amount', '!=', '0')->where('payed', 'Yes')
->select(DB::raw('"VK" AS payment_type, type, id, package, payed, amount, date_modified as date_added, payed as chargeid'))->get();
$q2 = DB::connection('mysql_live')->table('transactions_stripe')->where('user_id', $userid)->where('amount', '!=', '0')->where('payed', 'Yes')
->select(DB::raw('"Stripe" AS payment_type, type, id, package, payed, amount, date_added, charge_id as chargeid'))->get();
$total1 = $q1->merge($q2);
【讨论】:
以上是关于雄辩 |添加自定义值以选择的主要内容,如果未能解决你的问题,请参考以下文章
laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑
指定自定义值以在 Zapier 集成 Gmail 到 S3 中构建 S3 密钥