簡體   English   中英

Laravel 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.

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