2014-11-09 3 views
0

쿼리에 가능한 결과가없는 경우 쿼리에 할당 된 변수가 if(!$alerts) 줄에 'undefined variable $ alerts'오류를 반환합니다.Laravel - 쿼리가 결과를 반환하지 않는 경우 정의되지 않은 변수

foreach($locations as $location) 
    { 
     $alerts = Alert::where('location_id', '=', $location) 
     ->lists('id'); 
    } 

if(!$alerts){ 
     return Redirect::to('/users/')->with('message-warning', 
             'No matches have been found yet.'); 
    } 

$alerts 변수는 다른 곳 컨트롤러 내에서이 아니다.

쿼리가 결과를 반환하지 않더라도 여전히 if(!$alerts)을 통해 확인할 수 있습니까?

도움 주셔서 감사합니다.

+1

코드가 잘못되었습니다. 처음에는 루프 내에서 db 쿼리를 사용하고 마지막 루프 이후에는 '$ 경고'가 마지막 항목이됩니다. –

+1

루프 안에'$ alerts'의 배열을 만들려고합니까? 그렇다면'$ alerts [] = Alert :: where ...'을 사용해야한다. 그렇지 않으면 루프의 마지막 위치에서 경고를 리턴한다. – damiani

+0

@Alpha, @Damiani, 둘 다 맞습니다. 저는 이것을 간과했습니다. '$ alerts []'는 모든 결과를 반환합니다. 머리를 위해 많은 감사드립니다! – Ben

답변

0

당신이 시도 할 수 있습니다 :

$alerts = Alert::whereIn('location_id', $locations)->lists('id'); 

if(!$alerts) { 

    return Redirect::to('/users/')->with('message-warning', 'Your message!'); 
} 

그것은 더 나은, 하나의 쿼리가 실행됩니다.

+0

'WhereIn'문은 그 주변의 'forloop'에 대한 필요성을 제거 할 것입니까? 수식을 단순화하기 위해 제거한 다른 'where'문장이 있는데, 가정 한 후에 추가 할 수 있습니까? – Ben

+0

'whereIn'을 사용하면 하나의 DB 쿼리를 사용하여 배열의 모든 항목을 찾습니다. –

+0

그리고'foreach ($ locations as $ location)'를 제거 할 수 있습니까? – Ben

1

$locations이 비어있는 경우, foreach는하지 루프, 그리고 $alerts가 초기화되지 않습니다. 내가 루프 전에 변수를 초기화하는 것이 좋습니다 :

$alerts = null; 

foreach ($locations as $location) { } 

if(!$alerts) { } 
+0

완벽하게 작동합니다. 많은 감사합니다 @DamienPirsy. 9 분 안에 대답을 수락 할 수 있습니다. – Ben

1

먼저 쿼리를 루프로 실행하지 마십시오. 결과가 항상 쿼리의 마지막 행이기 때문에 변수 대신 배열에 결과를 저장해야합니다. foreach 루프에 들어가기 전에 $ alert variable/array를 선언해야합니다. 그래야 쿼리가 결과를 반환하지 않으면 변수/배열이 여전히있을 것입니다. 쿼리가 결과를 반환하지 않으면 결과가 반환되지 않습니다. $ alert 변수는 전혀 없습니다.

관련 문제