2013-10-21 3 views
2

Laravel에서 매개 변수를 라우팅하기 위해 모델을 바인딩 할 수 있지만 선택적 쿼리 문자열 매개 변수에 바인딩 할 수있는 방법이 있다는 것을 알고 있습니다.Laravel 4에서 쿼리 문자열 매개 변수에 모델을 바인딩하는 방법은 무엇입니까?

http://myapi.example.com/products?category_id=345 

의 경로를 사용합니다 :

의 URL의 주어진 예를 들어

, 우리의 카테고리 모델에 우리의 선택 쿼리 문자열 매개 변수 category_id을 결합 할 수있는 방법이 있나요

Route::resource('products', 'ProductController'); 

를, 그래서 ProductController에 자동으로 주입 될 수 있습니까?

답변

0

현재로서는 일부 RESTful 경로를 주어진 리소스 (예 : docs)에 자동으로 매핑하기 때문에 리소스 경로에서는 가능하지 않다고 생각합니다. 선택적 매개 변수가있는 경로를 원할 경우 Laravel에 경로를 작성하고 리소스 컨트롤러를 선언하기 전에 다른 옵션을 사용해야합니다.

0

가능한 것은 아니지만 질문 할 때와는 다릅니다.

우리의 선택 쿼리 문자열 매개 변수를 결합 할 수있는 방법이 있나요 자동 ProductController에 주입 할 수 있도록, 우리의 카테고리 모델에 을 CATEGORY_ID?

쿼리 문자열 매개 변수를 범주 모델이 아닌 제품 모델에 바인딩합니다.

다음은 쿼리 문자열 입력을 기반으로 필터링 된 데이터를보기로 보내는 빠르고 간단한 방법입니다. 카테고리 관계를 필터링합니다.

방금 ​​답변을 접했을 때 구문 오류가있을 수 있지만 개념은 작동합니다.

ProductController

class ProductController extends BaseController 
{ 
    protected $productModel; 
    function __construct(Product $productModel) 
    { 
     $this->$productModel = $productModel; 
    } 

    public function index() 
    { 
     $products = $this->productModel 
      ->join('categories', 'categories.id', '=', 'products.category_id'); 
      ->select(// select your columns) 

     $filterCategory = Input::get('category_id'); 

     if ($filterCategory) 
     { 
      ->where('category_id', '=', $filterCategory) 
     } 

     $data = $products->get(); 

     return View::make('shop.product.index')->with($data); 
    } 
} 

더 나은 솔루션이 코드 멀리 컨트롤러에서 추상화하고 모델의 newQuery의 메소드를 오버라이드 (override)합니다.

newQuery 메서드를 소개 한 저의 비슷한 질문 중 하나에서 실제로 기쁜 답변이었습니다. Laravel 4: Select row if a relation exists by querying relation

관련 문제