【问题标题】: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"

【问题讨论】:

    标签: sql laravel eloquent


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2020-07-29
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        相关资源
        最近更新 更多