2014-07-16 8 views
0

저는 매우 큰 쿼리와 더 많은 쿼리를 가지고 있습니다.SQL 쿼리를 Laravel로 변환 하시겠습니까?

아무것도 반환하지 않는 것을 제외하고 Laravel의 DB 클래스와 함께 작동하도록 변환하려고 시도했습니다.

자동으로 수행 할 수있는 기능이 있습니까? 변환기처럼?

내가 뭘 잘못하고 있니?

SELECT 
cases.id 
FROM cases 
LEFT JOIN cases_cstm ON cases.id = cases_cstm.id_c 
JOIN cases_contacts_1_c ON cases.id = cases_contacts_1_c.cases_contacts_1cases_ida AND cases_contacts_1_c.deleted = 0 
JOIN contacts ON cases_contacts_1_c.cases_contacts_1contacts_idb = contacts.id AND contacts.deleted = 0 
LEFT JOIN contacts_pal_policy_adviser_list_1_c ON contacts.id = contacts_pal_policy_adviser_list_1_c.contacts_pal_policy_adviser_list_1contacts_ida 
LEFT JOIN pal_policy_adviser_list ON contacts_pal_policy_adviser_list_1_c.contacts_pal_policy_adviser_list_1pal_policy_adviser_list_idb = pal_policy_adviser_list.id 
LEFT JOIN huge__insurance_carriers_cases_1_c ON cases.id = huge__insurance_carriers_cases_1_c.huge__insurance_carriers_cases_1cases_idb AND huge__insurance_carriers_cases_1_c.deleted = 0 
LEFT JOIN huge__insurance_carriers ON huge__insurance_carriers_cases_1_c.huge__insurance_carriers_cases_1huge__insurance_carriers_ida = huge__insurance_carriers.id AND huge__insurance_carriers.deleted = 0 
LEFT JOIN products_cases_1_c ON cases.id = products_cases_1_c.products_cases_1cases_idb 
LEFT JOIN products ON products_cases_1_c.products_cases_1products_ida = products.id 
WHERE cases.deleted = 0 
AND contacts.id = 'b8a00721-40f1-7801-b4b9-50ce152ce2ec' 
AND ((cases.status = 'Entered') or (cases.status = 'Submitted') or (cases.status = 'Approved') or (cases.status = 'Issued') or (cases.status = 'Gathering_Medical_Information') or (cases.status = 'Awaiting_Carrier_Offers') or (cases.status = 'All_Offers_In') or (cases.status = 'Informal_Entered') or (cases.status = 'Await_Del_Req')) GROUP BY cases.id ORDER BY cases_cstm.insured_name_c ASC LIMIT 0, 20 

Laravel 쿼리

DB::table('cases') 
     ->leftJoin('cases_cstm', 'cases.id', '=', 'cases_cstm.id_c') 
     ->join('cases_contacts_1_c', 'cases.id', '=', 'cases_contacts_1_c.cases_contacts_1cases_ida') 
     ->join('contacts', 'cases_contacts_1_c.cases_contacts_1contacts_idb', '=', 'contacts.id') 
     ->leftJoin('contacts_pal_policy_adviser_list_1_c', 'contacts.id', '=', 'contacts_pal_policy_adviser_list_1_c.contacts_pal_policy_adviser_list_1contacts_ida') 
     ->leftJoin('pal_policy_adviser_list', 'contacts_pal_policy_adviser_list_1_c.contacts_pal_policy_adviser_list_1pal_policy_adviser_list_idb', '=', 'pal_policy_adviser_list.id') 
     ->leftJoin('huge__insurance_carriers_cases_1_c', 'cases.id', '=', 'huge__insurance_carriers_cases_1_c.huge__insurance_carriers_cases_1cases_idb') 
     ->leftJoin('huge__insurance_carriers', 'huge__insurance_carriers_cases_1_c.huge__insurance_carriers_cases_1huge__insurance_carriers_ida', '=', 'huge__insurance_carriers.id') 
     ->leftJoin('products_cases_1_c', 'cases.id', '=', 'products_cases_1_c.products_cases_1cases_idb') 
     ->leftJoin('products', 'products_cases_1_c.products_cases_1products_ida', '=', 'products.id') 
     ->where('contacts.id', '=', 'b8a00721-40f1-7801-b4b9-50ce152ce2ec') 
     ->orWhere('cases.status', '=', 'Entered') 
     ->orWhere('cases.status', '=', 'Submitted') 
     ->orWhere('cases.status', '=', 'Approved') 
     ->orWhere('cases.status', '=', 'Issued') 
     ->orWhere('cases.status', '=', 'Gathering_Medical_Information') 
     ->orWhere('cases.status', '=', 'Awaiting_Carrier_Offers') 
     ->orWhere('cases.status', '=', 'All_Offers_In') 
     ->orWhere('cases.status', '=', 'Informal_Entered') 
     ->orWhere('cases.status', '=', 'Await_Del_Req'); 
     ->get(); 
+0

덜 정교한 검색어로 시작하여 구축하는 것처럼 덜 야심적 인 전환을 시도 했습니까? 또한 실제로 실행되는 쿼리는 무엇입니까? – tadman

+0

'DB :: select()'메서드를 사용하여 그대로 쿼리를 실행할 수도 있습니다. – Kryten

+0

당신은 괄호 안에 그 wheres를 감싸기 위해서'where (function ($ q) {$ q-> where (...) -> orWhere (...) ...})' 열 ', [...])'로 표시됩니다. –

답변

0
$statuses = [...]; // array of statuses to compare 

DB::table('cases') 
    // all your joins 
    ->where('contacts.id', '=', 'b8a00721-40f1-7801-b4b9-50ce152ce2ec') 
    ->whereIn(cases.status', $statuses) 
    ->get(['cases.id']); 

또는 (정말, 단지 예로서하지 않음) : 또한

DB::table('cases') 
    // all your joins 
    ->where('contacts.id', '=', 'b8a00721-40f1-7801-b4b9-50ce152ce2ec') 
    ->where(function($q) { // this will wrap all those OR WHERE clauses in AND (..) 
    $q->where(...) 
     // all the orWheres 
     ->orWhere(...); 
    }) 
    ->get(['cases.id']); 

, 배열을 얻기 위해 그 이후 DB::getQueryLog()를 사용 Laravel이 실행 한 쿼리 중