2014-11-06 3 views
4

일련의 비 쿼리 문으로 구성된 복잡한 SQL을 가지고 있으며, MySql의 임시 테이블을 사용하고 결과를 반환하는 SELECT 문을 마지막으로 사용합니다.Laravel에서 복잡한 sql 쿼리를 실행하는 방법

예컨대

DROP TABLE IF EXISTS temp_foo; 

CREATE TEMPORARY TABLE IF NOT EXISTS temp_foo AS (
    SELECT * 
    FROM foo 
); 

SELECT * from temp_foo; 

가 어떻게 모든 Laravel에서 하나의 DB 호출이 실행하고 마지막 SELECT 한 Statment의 결과를 얻을 수 있습니까?

laravel에서 이와 같은 작업을 시도했지만 직접적으로 MySQl에서 실행할 때 정확한 SQL이 작동하므로 이상한 MySql 구문 오류가 발생합니다.

DB::select(" 

    DROP TABLE IF EXISTS temp_foo; 

    CREATE TEMPORARY TABLE IF NOT EXISTS temp_foo AS (
     SELECT * 
     FROM foo 
    ); 

    SELECT * from temp_foo; 

"); 

어떻게하면이 작업을 할 수 있습니까?

답변

1

: 원시() 만들기 쿼리 작업을 예를 들어 :

DB::select(DB::raw(" 
    DROP TABLE IF EXISTS temp_foo; 
    CREATE TEMPORARY TABLE IF NOT EXISTS temp_foo AS (
     SELECT * 
     FROM foo 
    ); 
    SELECT * from temp_foo; 
")); 

나는 단순히 selectRaw()를 사용하는 경우에도 가능하다고 생각하지만 난 모르겠어요. 또한,이 같은 temp_foo에서 모든 행을 선택할 수 있습니다 : 내가 만들고 저장 프로 시저를 실행했다 마이그레이션에서 비슷한 짓을했는지

DB::table('temp_foo')->get(); 
0

당신은 DB를보고 : 원시()() 선택 내부의 필요뿐만 아니라,이 사용해보십시오 :

당신은 DB를 사용할 필요가
DB::statement('drop table users'); 
0

. 내 위로() 나는 이런 식으로 사용했습니다.

public function up() { 
    $sql = <<<SQL 
    DROP TABLE IF EXISTS temp_foo; 

    CREATE TEMPORARY TABLE IF NOT EXISTS temp_foo AS (
     SELECT * 
     FROM foo 
    ); 

    SELECT * from temp_foo; 
    SQL; 

    DB::connection()->getPdo()->exec($sql); 
} 

당신이 사용할 수 있습니다

DB::connection()->getPdo()->exec($sql); 
관련 문제