我试图在产品的URL地址中显示参数参数。例如:/product?brand=2&view=5
本讲话分为两部分:
- 品牌
- 显示的产品数量
products
表(型号名称:Product
)
| 标题| title |
| --| ------------ |
| iPhoneX| iPhoneX |
| 三星Note8| SamsungNote8 |
| MiRedmi8| MiRedmi8 |
| MiPoco5| MiPoco5 |
| MiX3Pro| MiX3Pro |
| 索尼Z2| SonyZ2 |
| MiX5Pro| MiX5Pro |
| MiX4Pro| MiX4Pro |
| MiX7Pro| MiX7Pro |
brands
表(型号名称:Brand
)
| 姓名| name |
| --| ------------ |
| 索尼| Sony |
| 米| Mi |
| LG| LG |
| 三星| Samsung |
| iPhone| iPhone |
selects
表(型号名称:Select
)
| 品牌标识| brand_id |
| --| ------------ |
| 5| 5 |
| 4| 4 |
| 2| 2 |
| 2| 2 |
| 2| 2 |
| 1| 1 |
| 2| 2 |
| 2| 2 |
| 2| 2 |
我希望通过参数参数显示产品品牌。
输出:/product?brand=2&view=5
3: MiRedmi8
4: MiPoco5
5: MiX3Pro
7: MiX5Pro
8: MiX4Pro
routes/web.php
Route::get('/product', 'ProductController@index');
app/Models/Product.php
class Product extends Model
{
public $timestamps = false;
}
app/Models/Brand.php
class Brand extends Model
{
public $timestamps = false;
}
app/Models/Select.php
class Select extends Model
{
public $timestamps = false;
}
app/Http/Controllers/ProductController.php
public function index()
{
$view = request()->view ? request()->view : 20;
$products = Product::orderBy('id', 'DESC')
->where(function($query) {
$brand = Request()->brand;
if ($brand) {
$query->Select::where('id', $brand)
->whereIn(['id' => $brand]);
}
})
->paginate($view);
return view('index', compact('products'));
}
resources/views/index.blade.php
@foreach($products as $row)
{{ $row->id }} : {{ $row->title }}
@endforeach
{{ $products->appends(request()->query())->links() }}
但是它给了我一个错误,说Select
不存在:
Eloquent构建器示例上不存在属性[Select]。
如何修复此错误并通过参数参数显示产品品牌?
1条答案
按热度按时间fivyi3re1#
你的数据库布局没有意义,如果一个
Product
有一个Brand
,那么就不需要数据透视表了。您的products
表应该有一个brand_id
列。然而,使用你现在拥有的东西,第一步是实际定义你的relationships:
您的
Select
模型是枢轴模型。它可能甚至不需要是一个模型,但如果是,它应该被定义为Pivot
而不是Model
:那么我想你的控制器应该是这样的。
Builder::when()
根据其第一个参数的值执行条件查询。因此,如果查询字符串变量被填充,它将搜索并过滤关系以获得适当的值。注意request()->query()
是获取查询字符串变量的方法。