簡體   English   中英

Laravel SQl:如果不存在任何記錄,如何返回0值

[英]Laravel SQl: How to return 0 value if no record exists

如果事務表中沒有記錄,我將嘗試返回零值。 現在,如果沒有針對特定預算的交易,那么我什么也得不到。 這是我現在的查詢。感謝您的幫助。 下面是一個示例,當我不要求它返回任何燃料時,何時需要它返回0。 我澄清了

預算表

_____________
id | name
1  | Groceries
2  | Fuel

交易表

__________________
id | Category_id | Amount
1  | 1           | 30

Laravel代碼

 $budgets = Budget::join('transactions', 'budgets.id', '=', 'transactions.category','left outer')
   ->select([
      DB::raw('SUM(transactions.amount) / budgets.amount * 100 as percent'),
                        'budgets.category'
    ])
    ->where('transactions.user_id','=', $authId)
    ->where('budgets.user_id','=',$authId)
    ->whereBetween('transactions.created_at', array($first_day_this_month, $last_day_this_month))
    ->groupBy('budgets.category','budgets.amount')
    ->get();

嘗試這個:

$budgets = array();
$budgets = Budget::join('transactions', 'budgets.id', '=', 'transactions.category','left outer')
                ->select([
                    DB::raw('SUM(transactions.amount) / budgets.amount * 100 as percent'),
                    'budgets.category'
                ])
                ->where('transactions.user_id','=', $authId)
                ->where('budgets.user_id','=',$authId)
                ->whereBetween('transactions.created_at', array($first_day_this_month, $last_day_this_month))

                ->groupBy('budgets.category','budgets.amount')
                ->get();

if( count($budgets) == 0 )
{
    return 0;
}
else
{
    return $budgets;
}

說明:最初$budgets是一個空白array() ,在運行查詢后,如果該數組仍然為空,則表示查詢不返回任何數據。 在這種情況下,返回0,否則返回數據數組。

您應該使用COALESCE函數:

替代

DB::raw('SUM(transactions.amount) / budgets.amount * 100 as percent'), 
'budgets.category'

DB::raw('COALESCE(SUM(transactions.amount), 0) / budgets.amount * 100 as percent'), 
'budgets.category'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM