2014-11-16 3 views
1

Я пытаюсь добавить Wheres на мой запрос в зависимости от того, что поступает из ГЭТ:Laravel запрос не работает

public function index($type_id) { 
    $Product = new Product; 
    $Product->where('type_id', $type_id); 
    if(array_key_exists('ages', Input::get())) { 
     $Product->where('age_id', $_GET['ages']); 
    } 
    $products = $Product->get(); 
    $productsPaginated = $Product->where('type_id', $type_id)->paginate(2); 
    return View::make('products.products', array(
       'products' => $products, 
       'productsList' => $productsPaginated 
        ) 
    ); 
} 

Но все это делает, возвращая каждую запись.

Что я делаю неправильно?


Это, как я рендеринга мои фильтры:

$brands = $prices = $ages = $brandsUsed = $agesUsed = array(); 
    $out = ''; 
    foreach ($productsList as $product) { 
     $brands[$product->brands->id] = $product->brands->brand; 
     $brandsUsed[] = $product->brands->id; 
     $prices[] = $product->price; 
     $ages[$product->ages->id] = $product->ages->age; 
     $agesUsed[] = $product->ages->id; 
    } 

    $brandsUsed = array_count_values($brandsUsed); 
    $brands = array_unique($brands); 
    $params = Input::get(); 
    $lastParams = http_build_query($params); 
    unset($params['brand']); 
    $params = http_build_query($params); 
    if (count($brands) > 0) { 
     $out .= '<h5>Brands</h5>'; 
     foreach ($brands as $brandId => $brandName) { 

      if (stristr($lastParams, '&brand=' . $brandId) || stristr($lastParams, 'brand=' . $brandId)) { 
       $out .= '<a class="filter-link" href="' . Request::path() . '?' . $params . '">'; 
      } else { 
       $out .= '<a class="filter-link" href="' . Request::path() . '?' . $params . '&brand=' . $brandId . '">'; 
      } 
      $out .= '<span class="cbox">'; 

      if (stristr($lastParams, '&brand=' . $brandId) || stristr($lastParams, 'brand=' . $brandId)) { 
       $out .= '<span class="cbox-checked"></span>'; 
      } 

      $out .= '</span>'; 
      $out .= $brandName; 
      $out .= ' (' . $brandsUsed[$brandId] . ')'; 
      $out .= '</a>'; 
     } 
    } 
+0

Что делать вы получаете, когда выполняете это, прямо перед 'return'? '$ queries = DB :: getQueryLog(); $ last_query = end ($ queries); ' – Cyril

+0

То, что вы делаете неправильно, определенно не зависит от того, что вы пытаетесь достичь, и того, что представляет собой фактический вывод, который вы считаете неисправным. –

ответ

2

Вы не можете создавать запросы на объект, вы должны сделать это таким образом:

public function index($type_id) { 
    $product = Product::where('type_id', $type_id); 
    if(array_key_exists('ages', Input::get())) { 
     $product->where('age_id', $_GET['ages']); 
    } 
    $productsAll = $product->get(); 
    $productsPaginated = $product->where('type_id', $type_id)->paginate(2); 
    return View::make('products.products', array(
       'products' => $productsAll, 
       'productsList' => $productsPaginated 
        ) 
    ); 
} 

Вы должны также рассмотреть, если имеет смысл получить все продукты, а также продукты с разбивкой по страницам. Если у вас много продуктов в вашей базе данных, потребуется много времени, чтобы получить все ваши продукты.

Я также не уверен, что именно вы хотите получить за $productsPaginated. Я думаю, что вам нужно здесь строить новый запрос:

$productsPaginated = Product::where('type_id', $type_id)->paginate(2); 

EDIT

Как вы хотите, чтобы получить количество продуктов только с одним фильтром, вы должны использовать здесь:

public function index($type_id) { 
    $product = Product::where('type_id', $type_id); 

    $productCount = $product->count(); 

    if(array_key_exists('ages', Input::get())) { 
     $product->where('age_id', $_GET['ages']); 
    } 
    $productsPaginated = $product->paginate(2); 

    return View::make('products.products', array(
       'productsCount' => $productCount, 
       'productsList' => $productsPaginated 
        ) 
    ); 
} 
+0

Эта строка должна возвращать все результаты, которые соответствуют типу только независимо от других примененных фильтров. То есть для количества продуктов в фильтре, например. Возраст 0 - 6 (5), поэтому пользователь знает, что будет 5 результатов, если они применили этот фильтр. – imperium2335

+0

@ imperium2335 Я не знаю, понял ли я тебя, но я отредактировал свой ответ –

+0

+1 Спасибо, что он почти там. Только сейчас подсчеты рядом с каждым фильтром показывают только то, что на этой странице. То есть на первой странице Возраст 0 - 6 (3), но на стр. 2 Возрасты 0 - 6 (1), если вы знаете, что я имею в виду. – imperium2335

Смежные вопросы