![](/img/trans.png)
[英]Laravel9 - DB Query with one parent and 2 children not summing properly in selectraw
[英]Laravel SelectRaw Query Not Executing
我遇到了一個問題,下面列出的查詢不會在我們的實時服務器上執行(在我寫這篇文章時,它應該返回一個約 2940 條記錄的數據集,通過 MySQL 運行時查詢執行良好)。
它不會引發任何錯誤,查詢根本不會執行,並且代碼在查詢之后永遠不會到達任何內容。 這只會發生在我們的實時/生產服務器上,不會發生在我們的開發和本地環境中(也許是因為數據集要小得多?)
此 function 的目的是獲取此數據並將其發送到 CSV 文件中,然后將其交回給用戶,因此設置了 header。
header("Content-type: application/vnd.ms-word");
$filename = "ORDERS-" . date("m-d-Y") . ".csv";
$query_result = Order::selectRaw("orders.id AS \"Order_ID\", orders.distributor_id AS \"Distributor_ID\", orders.gross_total AS \"Gross_Total\", IF( orders.multiple_card_id != 0, \"Yes\", \"No\" ) AS \"Group_Order\", IF( orders.payment_plan_id != 0, \"Yes\", \"No\" ) AS \"Recurring_Order\", orders.name AS \"Order_Name\", order_statuses.name AS \"Order_Status\", order_statuses.id AS \"Order_Status_ID\", DATE(orders.created_at) AS \"Order_Date\", order_shipment_methods.name AS \"Shipping Method\", addresses.line1 AS \"Address_Line_1\", addresses.line2 AS \"Address_Line_2\", addresses.line3 AS \"Address_Line_3\", addresses.city AS \"City\", addresses.postal_code AS \"Address_Postal_Code\", states.name AS \"Address_State\", countries.name AS \"Address_Country\"")
->leftjoin("addresses", "addresses.id", "=", "orders.address_id")
->leftjoin("states", "addresses.state_id", "=", "states.id")
->leftjoin("countries", "addresses.country_id", "=", "countries.id")
->leftjoin("order_statuses", "orders.order_status_id", "=", "order_statuses.id")
->leftjoin("order_shipments", "order_shipments.order_id", "=", "orders.id")
->leftjoin("order_shipment_methods", "order_shipments.shipping_method_id", "=", "order_shipment_methods.id")
->whereRaw("YEAR(orders.created_at) = \"" . date("Y") . "\"")->get();
關於為什么這可能不起作用的任何指示? 我迷路了,因為錯誤日志中沒有任何內容或類似的東西。
該問題最終是由於 memory 溢出問題造成的。
我不想僅僅為這項工作增加 memory,所以我能夠通過使查詢一次獲取 1000 行而不是要求它一次獲取所有內容來解決這個問題。 由於多個數據庫調用,它的速度較慢,但它會完成工作。
$i = 0;
$size = 1000;
do
{
$query_result = Order::selectRaw("orders.id AS \"Order_ID\", orders.distributor_id AS \"Distributor_ID\", orders.gross_total AS \"Gross_Total\", IF( orders.multiple_card_id != 0, \"Yes\", \"No\" ) AS \"Group_Order\", IF( orders.payment_plan_id != 0, \"Yes\", \"No\" ) AS \"Recurring_Order\", orders.name AS \"Order_Name\", order_statuses.name AS \"Order_Status\", order_statuses.id AS \"Order_Status_ID\", DATE(orders.created_at) AS \"Order_Date\", order_shipment_methods.name AS \"Shipping Method\", addresses.line1 AS \"Address_Line_1\", addresses.line2 AS \"Address_Line_2\", addresses.line3 AS \"Address_Line_3\", addresses.city AS \"City\", addresses.postal_code AS \"Address_Postal_Code\", states.name AS \"Address_State\", countries.name AS \"Address_Country\"")
->leftjoin("addresses", "addresses.id", "=", "orders.address_id")
->leftjoin("states", "addresses.state_id", "=", "states.id")
->leftjoin("countries", "addresses.country_id", "=", "countries.id")
->leftjoin("order_statuses", "orders.order_status_id", "=", "order_statuses.id")
->leftjoin("order_shipments", "order_shipments.order_id", "=", "orders.id")
->leftjoin("order_shipment_methods", "order_shipments.shipping_method_id", "=", "order_shipment_methods.id")
->whereRaw("YEAR(orders.created_at) = ?", [ date("Y") ])->offset( $i * $size )->limit( $size )->get();
//now for each query result, we'll pop the data into the csv
foreach( $query_result as $q )
{
$data_set = [];
foreach( $q as $key => $value ) { array_push( $data_set, $value ); }
fputcsv( $dl, $data_set );
}
$i++;
} while ( count($query_result) == $size );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.