雄辩 |添加自定义值以选择

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:如何设置带有条件的自定义列?

laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑

指定自定义值以在 Zapier 集成 Gmail 到 S3 中构建 S3 密钥

如何在 Vue 自定义中间件中获取 Vuex 更新的 getters 值以进行权限检查?

禁用在Woocommerce中编辑特定的管理员自定义字段

在DataGrid中绑定自定义标头控件