URL 的传递变量到 Laravel 的方法
Transmission variable of URL to the method in Laravel
) 我有方法:
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) {
$query->where(['category_id', 19]);
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
此方法 return 生成了所选类别中的产品列表。编号 19 是选定的 ID 类别。所选类别中的产品列表 URL 如下所示:www.[...]magazyn_michal/public/addcategory/19 问题是:如何将 URL 的动态值数字 ID 类别 (19) 传递给方法 ?? 我试试这个(但不起作用):
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) {
$query->where(['category_id' => $categories->id]);
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
Laravel return编辑:
Undefined variable: categories
这种方式也不行:
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) {
$query->where('category_id', Input::get('category_id'));
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
Laravel 无所不能return。所选类别中的产品列表为空。
routes.php 文件:
Route::get('/', 'ProductsController@index');
Route::get('/contact', 'PagesController@contact');
Route::resource('/addarticle', 'ArticlesController');
Route::resource('/addcategory', 'CategoriesController');
Route::resource('/listcategory', 'CategoriesController@listCategory');
Route::resource('/warehouse', 'ProductsController');
Route::auth();
Route::get('/home', 'HomeController@index');
型号category.php:
public function products(){
return $this->hasMany('App\Product');
}
型号product.php:
public function category(){
return $this->belongsTo('App\Category');
}
我用这个:https://laravel.com/docs/5.2/eloquent-relationships#constraining-eager-loads
在这种情况下,您应该使用路由模型绑定。你可以让你的路线 /categories/19
return Category
对象而不仅仅是一个 ID。这可能已经发生,导致您调用 findOrFail
时出错。
查看:https://laravel.com/docs/master/routing#route-model-binding
你也应该使用 Laravel 关系,所以你可以把这个函数放在你的 Category
class:
public function products(){
return $this->belongsToMany('App\Product');
}
更多关于关系的阅读:https://laravel.com/docs/master/eloquent-relationships
如果您同时执行这两项操作,您的控制器方法将如下所示:
public function show(Category $category){
$products = $category->products;
return view('categories.showcategory', compact('category', 'products'));
}
根据你给我看的所有测试,我想我已经知道了。 $categories 超出您查询的范围。试试这个:
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) use ($categories) {
$query->where('category_id', $categories->id)
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
use 声明将类别置于匿名函数的范围内
好的,我修复了这个问题。现在可以使用了 ;)
public function show($id){
$categories = Category::findOrFail($id);
$categoryID = Input::get('category_id');
$productsList = Category::with(['products' => function ($query) use($id) {
$query->where('category_id', '=' ,$id);
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
) 我有方法:
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) {
$query->where(['category_id', 19]);
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
此方法 return 生成了所选类别中的产品列表。编号 19 是选定的 ID 类别。所选类别中的产品列表 URL 如下所示:www.[...]magazyn_michal/public/addcategory/19 问题是:如何将 URL 的动态值数字 ID 类别 (19) 传递给方法 ?? 我试试这个(但不起作用):
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) {
$query->where(['category_id' => $categories->id]);
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
Laravel return编辑:
Undefined variable: categories
这种方式也不行:
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) {
$query->where('category_id', Input::get('category_id'));
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
Laravel 无所不能return。所选类别中的产品列表为空。
routes.php 文件:
Route::get('/', 'ProductsController@index');
Route::get('/contact', 'PagesController@contact');
Route::resource('/addarticle', 'ArticlesController');
Route::resource('/addcategory', 'CategoriesController');
Route::resource('/listcategory', 'CategoriesController@listCategory');
Route::resource('/warehouse', 'ProductsController');
Route::auth();
Route::get('/home', 'HomeController@index');
型号category.php:
public function products(){
return $this->hasMany('App\Product');
}
型号product.php:
public function category(){
return $this->belongsTo('App\Category');
}
我用这个:https://laravel.com/docs/5.2/eloquent-relationships#constraining-eager-loads
在这种情况下,您应该使用路由模型绑定。你可以让你的路线 /categories/19
return Category
对象而不仅仅是一个 ID。这可能已经发生,导致您调用 findOrFail
时出错。
查看:https://laravel.com/docs/master/routing#route-model-binding
你也应该使用 Laravel 关系,所以你可以把这个函数放在你的 Category
class:
public function products(){
return $this->belongsToMany('App\Product');
}
更多关于关系的阅读:https://laravel.com/docs/master/eloquent-relationships
如果您同时执行这两项操作,您的控制器方法将如下所示:
public function show(Category $category){
$products = $category->products;
return view('categories.showcategory', compact('category', 'products'));
}
根据你给我看的所有测试,我想我已经知道了。 $categories 超出您查询的范围。试试这个:
public function show($id){
$categories = Category::findOrFail($id);
$productsList = Category::with(['products' => function ($query) use ($categories) {
$query->where('category_id', $categories->id)
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}
use 声明将类别置于匿名函数的范围内
好的,我修复了这个问题。现在可以使用了 ;)
public function show($id){
$categories = Category::findOrFail($id);
$categoryID = Input::get('category_id');
$productsList = Category::with(['products' => function ($query) use($id) {
$query->where('category_id', '=' ,$id);
}])->get();
return view('categories.showcategory', compact('categories', 'productsList'));
}