据我所知,您可以将模型绑定到Laravel中的路由参数,但有一种方法可以绑定到可选的查询字符串参数。
例如,给定URL:
http://myapi.example.com/products?category_id=345
使用以下路线:
Route::resource('products', 'ProductController');
有没有办法将我们的可选查询字符串参数category_id
绑定到我们的Category模型,以便它可以自动注入到ProductController中?
答案 0 :(得分:0)
目前,我不认为资源路由是可行的,因为它会自动将一些RESTful路由映射到给定资源(根据docs)。如果你想要一个带有可选参数的路由,你必须使用一些其他的选项在Laravel中编写路由,并确保在声明资源控制器之前放置它。
答案 1 :(得分:0)
这是可能的,但不是你问的问题。
有没有办法绑定我们的可选查询字符串参数category_id 到我们的分类模型,以便它可以自动注入 ProductController?
将查询字符串参数绑定到产品模型,而不是类别模型。
以下是基于查询字符串输入将过滤后的数据发送到视图的快速而脏的方法。这会过滤类别关系。
可能会出现语法错误,因为我很快就找到了答案 - 但这个概念有效。
<强> 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方法。
事实上很高兴帮助我在我的一个类似问题中回答过他,他们向我介绍了newQuery方法。 Laravel 4: Select row if a relation exists by querying relation