2015-01-23 2 views
4

그래서 나는 laravel와 콤보 상자에 배치 할 목록을 준비하려는 내가 3 열 값에 가입 CONCATENATE를 사용하고 싶어하고 나는이Laravel 4와 열을 연결할 때 ''열 이름이 잘못되었습니다. Eloquent?

public function deviList() { 
     return Device::select(DB::raw('CONCAT(DESC, OS, OS_V) AS FullDesc'), 'DEVI_ID')       
         ->where('STATUS', 2) 
         ->orderBy('DESC') 
         ->lists('FullDesc', 'DEVI_ID'); 
    } 

으로는 더 나은 것 그러나 것을 달성 할 수있다 공간이 있거나 열 값을 구분 슬래시 그래서 나는 다음과 같이했다, 다른 장소에서 시스템 권장 어떤 사람들 동일하게 :

public function deviList() { 
     return Device::select(DB::raw('CONCAT(DESC," ",OS," ",OS_V) AS FullDesc'), 'DEVI_ID')       
         ->where('STATUS', 2) 
         ->orderBy('DESC') 
         ->lists('FullDesc', 'DEVI_ID'); 
    } 

그러나 나는 SQLSTATE [42S22]을 말하는 오류 : [마이크로 소프트] [SQL Server 용 ODBC 드라이버 11] [SQL 서버] 잘못된 열 이름 '' (그래서 저는 추측입니다. 다른 곳에서 주어진 예제와는 달리 이러한 구분은 마치 열처럼 읽히는가?) 그래서 나는 어떤 종류의 분리와 어떻게 연결할 수 있습니까?

+2

SQL 문이 작은 따옴표를 사용하도록 따옴표를 바꿀 수 있습니까? 'DB :: raw ("CONCAT (DESC,', OS, '', OS_V) AS FullDesc ')'? – patricus

답변

2

SQL 서버에 QUOTED_IDENTIFIER이 켜져 있으면 큰 따옴표는 문자열 리터럴이 아닌 개체를 식별하는 데 사용됩니다. 이 경우 " "은 공백을 나타내는 문자열이 아니며 공백으로 표시되는 객체 (열)로 존재하지 않습니다. 당신의 SQL 문에 따옴표를 전환

시도 :

public function deviList() { 
    return Device::select(DB::raw("CONCAT(DESC,' ',OS,' ',OS_V) AS FullDesc"), 'DEVI_ID')       
     ->where('STATUS', 2) 
     ->orderBy('DESC') 
     ->lists('FullDesc', 'DEVI_ID'); 
} 

QUOTED_IDENTIFIER 문서 here.

0

SQL Server에서 작업 한 지 오래되었지만 사용 가능한 기능은 없습니다 (CONCAT). 내가 쿼리 경우 그래서 이것을 사용할 수 있다고 생각

SELECT (COALESCE(col1, '') + '' + COALESCE(col2, '')) AS col3 FROM ... 

: 대신,이 같은 것을 사용

public function deviList() { 
    return Device::select(DB::raw('(COALESCE(DESC, "") + " " + COALESCE(OS, "") + " " (COALESCE(OS_V, "")) AS FullDesc'), 'DEVI_ID')       
    ->where('STATUS', 2) 
    ->orderBy('DESC') 
    ->lists('FullDesc', 'DEVI_ID'); 
} 

Unfortuneately, 나는이 테스트 방법이 없습니다,하지만 그것을해야 할 것은 COALESCE()을 사용하여 열이 공백으로 연결되기 전에 열이 null인지 확인한 다음 나중에 사용하기 위해 FullDesc으로 별칭을 지정합니다.

잘하면 작동합니다.

+0

** CONCAT (DESC, OS, OS_V) AS FullDesc와 함께 작동하지 않는다면 ** **하지만 그것은 잘된 것처럼, 내가 말한 것처럼 연결된 열을 보여줍니다. 방금 백래시 또는 밑줄이나 스페이스 또는 더 나은 프리젠 테이션 목적을 위해 뭔가 분리하려는 경우 –

+0

하지만 SQL 오류가 발생하고 있습니까? 이제는 혼란 스럽습니다 : P –

+0

하지만, ** 분리 (** 'CONCAT (DESC, ", OS,"OS_V) AS FullDesc "),'DEVI_ID '를 추가하려고 할 때만 ** –