2014-11-25 2 views
3

특정 필드와 데이터 값을 쿼리에 하드 코딩 할 수 없습니다. ** 여기Laravel foreach "where"with eloquent

return Listing::where('id', $id) 
      ->where(function($query) use ($input) { 
       ->where('field_1', 'foo_1') 
       ->where('field_2', 'foo_2') 
       ->where('field_3', 'foo_3') 
      } 
      ->get(); 

을 내가 **

return Listing::where('id', $id) 
     ->where(function($query) use ($input) { 
      $i = 0; 
      foreach ($input as $key => $value) { 
       $i++; 
       // ->where('field_1', red_1); // Desired output 
       ->where("where(field_{$i},".$value."_1)"); 
       // $query = $query."where(field_{$i},".$value."_1)"."<br>"; 
       // return $query prints out the following 
       /* 
        field_1 red_1, 
        field_2 foo_1, 
        field_3 bar_3 
       */ 
      } 
     }) 
     ->get(); 
+0

는 PHP의 ... 당신이 쓸 수 없다'-> where' 공기에서. 여기에 객체 여야합니다. –

+0

내가 어떻게 할 수있는 간단한 예를 보여 주시겠습니까? 감사합니다 –

+0

예를 들면 :'$ query-> where ($ field, $ value);' –

답변

3

가 이런 식으로 뭔가 일을해야이 작업은 다음과 같습니다 :

$listing = Listing:where('id', $id); 
foreach ($input as $key => $value) { 
    $i++; 
    // ->where('field_1', red_1); // Desired output 
    $listing->where("where(field_{$i},".$value."_1)"); 
} 
$results = $listing->get(); 
+1

완벽하게 일했습니다! 정말 고맙습니다! –

3
$query = Listing::where('id', $id); 
$i = 0; 
foreach ($input as $key => $value) { 
    $i++; 
    $query->where('field_'.$i,$value.'_'.$i); 
} 
return $query->get(); 

한 당신을 이런 식으로 뭔가를 얻으려고 제대로 연결되지 않았고 두 사람이 querybuilder 클로저를 잘못 사용하고 있습니다. 루프와 같은 논리를 실행하려면 쿼리를 분석해야합니다. 또한 어디에서 closure를 사용하는 것은 여러분의 주변에 괄호를 쓰는 것과 같습니다. 같은

뭔가 :

$query->where('bacon', $foo) 
    $query->where(function ($query) use ($bar, $baz){ 
     $query->where('apple', $bar); 
     $query->orWhere('orange', $baz) 
    }); 

대략로 번역 하시겠습니까 :

WHERE bacon = $foo AND (apple = $bar OR orange = $baz)