2017-05-06 51 views
0

工作我已經做了以下查詢訂購由不分貝生自定義查詢

$query = 'select cdo.id, cdo.user_id, cdo.created_at, cdo.updated_at, cdo.shipping_charges from certi_dia_orders cdo inner join users u on cdo.user_id = u.id where cdo.type = "Order"'; 

if(isset($_REQUEST['order-status']) && strtolower($_REQUEST['order-status']) == 'pending'){ 
     $query .= ' and cdo.status = "under process"'; 
     } else if(isset($_REQUEST['order-status']) && strtolower($_REQUEST['order-status']) == 'delivered'){ 
     $query .= ' and cdo.status = "delivered"'; 
     } else if(isset($_REQUEST['order-status']) && strtolower($_REQUEST['order-status']) == 'all'){ 

     } else { 
     $query .= ' and cdo.status = "under process"'; 
     } 

     if(isset($_REQUEST['buyer_username']) && $_REQUEST['buyer_username']!=''){ 
     $query .= ' and u.username like "%'.addslashes($_REQUEST['buyer_username']).'%"'; 
     } 

     if(isset($_REQUEST['date_from']) && $_REQUEST['date_from']!='' && isset($_REQUEST['date_to']) && $_REQUEST['date_to']!='' && strtotime($_REQUEST['date_to']) > strtolower($_REQUEST['date_from'])){ 
     $query .= ' and (cdo.created_at between "'.addslashes($_REQUEST['date_from']).'" and "'.addslashes($_REQUEST['date_to']).'")'; 
     } 

$order = DB::table(DB::raw("(".$query.") as tbl"))->orderBy('id','desc')->paginate(10); 

但它不desending順序返回記錄。我也遇到了與其他項目相同的問題。

我的意思是爲什麼orderby沒有按預期工作?它正在以強化順序顯示記錄。

什麼可能是問題和可能的解決方案?

回答

1

生表達+馬爾辛 - nabiałek說,你必須寫寫在正確引導的有效語法。 您的代碼必須這樣寫的:

$order = DB::table('certi_dia_orders as cdo') 
     ->leftJoin('users as u', 'cdo.user_id', '=', 'u.id') 
     ->select(['cdo.id, cdo.user_id, cdo.status, cdo.created_at, cdo.updated_at, cdo.shipping_charges, u.id']) 
     ->where('cdo.type', 'Order'); 

    if (isset($_REQUEST['order-status']) && strtolower($_REQUEST['order-status']) == 'pending') { 
     $order->where('cdo.status', '=', 'under process'); 
    } else { 
     if (isset($_REQUEST['order-status']) && strtolower($_REQUEST['order-status']) == 'delivered') { 
      $order->where('cdo.status', '=', 'delivered'); 
     } else { 
      if (isset($_REQUEST['order-status']) && strtolower($_REQUEST['order-status']) == 'all') { 

      } else { 
       $order->where('cdo.status', '=', 'under process'); 
      } 
     } 
    } 

    if (isset($_REQUEST['buyer_username']) && $_REQUEST['buyer_username'] != '') { 
     $order->where('u.username', 'like', '%' . addslashes($_REQUEST['buyer_username']) . '%'); 
    } 

    if (isset($_REQUEST['date_from']) && $_REQUEST['date_from'] != '' && isset($_REQUEST['date_to']) && $_REQUEST['date_to'] != '' && strtotime($_REQUEST['date_to']) > strtolower($_REQUEST['date_from'])) { 
     $order->whereBetween('cdo.created_at', [ 
      addslashes($_REQUEST['date_from']), 
      addslashes($_REQUEST['date_to']), 
     ]); 
    } 

    $orders = $order->orderBy('cdo.id', 'desc')->paginate(10); 

另一建議的事情,而不是$ _REQUEST [ '變量']使用laravel方式請求( '變量')

0

這可能是因爲您使用的語法無效。

你應該使用:

DB::table(...)->select(...)->orderBy('id','DESC')->paginate(10); 

,並往裏放DB::table

Reference

+0

我使用原因是我必須在查詢中實現一些自定義條件。我正在編輯我的問題並提及所有自定義條件。 – Jass

+0

另外我必須使用連接,如果你在我的查詢中注意到它 – Jass