2016-06-18 5 views
1

누군가 도움이된다면 정말 좋겠어. Twig에서 두 가지 쿼리를 반복하는 방법을 찾아 내려고했다. 나는 PHP로 만들 수 있지만 Twig에서 똑같은 일을하고있다. 이것은 내가 PHP에 그것을 일반적으로 줄 방법은 다음과 같습니다Twig에서 두 개의 데이터베이스 쿼리를 사용하는 루프

foreach($items as $item){ 
    $product_id = $item; 
    $products = $app->db->table('products')->where('id', $product_id)->first(); 
    echo "<li>" . $products->title . "</li>"; 
} 

위의 코드는 잘 작동하지만 나뭇 가지에 다음 루프 반복하지 않습니다,하지만 같은 일을 반복 계속됩니다. 위와 같이 Twig for loop를 어떻게 사용할 수 있는지 알고 계시면 도움이됩니다. Slim에서 Laravel Eloquent를 사용하여 쿼리하고 있습니다.

이것은 내가 무슨 짓을 :

컨트롤러

$products = $app->db->table('products')->where('trash', '0')->first(); 

보기

{% for item in items %} 
     {% set product_id = item.id %} 
     <li> {{ products.title }}</li> 
{% endfor %} 

그것은 단지 첫 번째 행을 표시하고 samething를 반복합니다.

+0

공유하여 나뭇 가지 코드하세요? – Timo

답변

0

템플릿에서 쿼리를 실행하지 마십시오. 컨트롤러에서 수행하고 템플릿에 결과를 전달합니다.

또한 $items는 ID의 배열로 나타납니다, 그래서 당신은 (대신 여러 쿼리의)는 어디에 된 상태로 한 번에 모든 제품을로드 할 수 있어야한다 :

컨트롤러 :

$products = $app->db->table('products')->whereIn('id', $items)->get(); 

// pass $products to the template as "products" 

나뭇 가지 템플릿 :

{% for product in products %} 
    <li>{{ product.title }}</li> 
{% endfor %} 
+0

답해 주셔서 고맙습니다. 컨트롤러에서 첫 번째 쿼리에서 디코딩 된 두 개의 $ items 항목과 두 번째 쿼리를 실행하려고합니다. 제품에서 첫 번째 행만 쿼리하려고하지만 $ twog에서만 제대로 작동합니다. 첫 번째 쿼리는 아니고 다음 루프는 아닙니다. –

+1

실제로 컨트롤러 수준에서 쿼리를 실행해서는 안되며 데이터 계층에서 쿼리를 실행하면 안됩니다. 예를 들어 컨트롤러에서 데이터 계층을 추상화하는 서비스를 사용하는 '모델'입니다. –

+1

@DaGhostmanDimitrov이 아이디어를 확장하면 ' 실제 데이터 조작이 발생하는'ModelRepository'와의 상호 작용을 처리하기 위해 모델 내에서 '특성'을 사용합니다. 단위 테스트를 실행할 때 서비스 계층을 통해 전체 루틴을 액세스 할 수있게합니다. 매우 중요합니다. – Ohgodwhy