我的数据库中有一个表,它有一个字段lis_type
,该字段有两个值:sale
和rent
,我正在视图页面上调用数据。假设我点击销售页面,只显示sale similar listing
。如果我点击Rent
,那么rent
应该显示similar listing
。然而,现在两个列表都在一起,请让我来指导我在哪里犯了错误。
控制器
public function listingshownow(Request $r, $slug)
{
$listview = Listing::where('slug', $slug)->first();
$products = Listing::where('propId', $listview->propId)
->where(function ($query) {
$query->where('lis_type', '=', 'sale')->orWhere('lis_type', '=', 'rent');
})->get();
return view('listings-view', compact('products'));
}
查看类似列表
@foreach($products as $prod)
@if($prod->lis_type === 'sale')
<div class="row featured portfolio-items">
<div class="col-lg-7 col-md-12 homes-content pb-0 mb-44">
<ul class="homes-list clearfix">
<li>
<i class="fa fa-bed" aria-hidden="true"></i>
<span>{{$prod->ls_fs}}</span>
</li>
<li>
<i class="fa fa-bath" aria-hidden="true"></i>
<span>{{$prod->bathroom}} Bathroom</span>
</li>
</ul>
</div>
</div>
@endif
@endforeach
您需要将一个变量传递给控制器,以指示您正在查看的页面类型,这样您就可以在查询/筛选器中使用它。
例如,假设您的销售页面URL看起来像http://example.com/listings/sales
。然后你可以设置一条路线,比如:
Route::get('listings/{type}', 'ListingsController@show');
现在你的ListingsController
可以有一个类似的方法:
// The $type parameter will be what was matched in the route
public function show($type) {
$listings = Listings::where('lis_type', $type)->get();
return view('listings-view', ['listings' => $listings]);
}
您可能需要检查$type
是否仅与您期望的值匹配。你可以在控制器中这样做,例如:
// At the top of show()
if ($type !== 'sales' && $type !== 'rent') {
abort(404);
}
或者你可以在你的路线中限制它,通过指定那里的{type}
必须匹配某种模式:
Route::get('listings/{type}', 'ListingsController@show')->where('type', 'sales|rent');
所有这些都包含在Laravel路由文档中,我建议阅读它们,更好的是,花点时间浏览所有文档!30分钟的略读会让你对事情的运作有一个大致的了解,以及在你需要回答问题时应该去哪里看和读更多的东西。