php - 独立于会议类别单击“所有类别”时获取会议
问题描述
我有这个代码,这样当一个类别被点击时,它只显示属于该点击类别的会议。
它工作正常。
但我也有一个链接“所有类别”,我希望当单击此链接时,可以独立于类别获得最后 8 个会议。
但我不明白如何才能正确实现。你知道如何?是否需要为“所有类别”创建另一条路线和该链接的特定方法?或者当用户单击特定类别时,是否可以重用已经工作的路由方法?
HTML:
<ul class="modal-list row">
<li>
<a name="category" id="">All Categories</a>
</li>
@foreach($categories as $category)
<li>
<img src="{{ $category->image }}"/>
<a name="category" id="{{$category->id}}">{{$category->name}}</a>
</li>
@endforeach
</ul>
jQuery 和 AJax:
$("a[name='category']").on('click', function(){
$(".active").removeClass("active");
if($(this).closest(".modal-list").length) {
$('#showCategories').html($(this).text()+' <i class="fa fa-caret-down" aria-hidden="true"></i>');
$('.clicked_category').html($(this).text());
$('#categoriesModal').modal('hide');
$('#showCategories').parent('li').addClass('active');
}
else
{
$(this).parent('li').addClass('active');
}
var category_id = $(this).attr("id");
$(this).parent('li').addClass('active');
$.ajax({
url: '{{ route('category.conferences',null) }}/' + category_id,
type: 'GET',
success:function(result){
$('#conferences').empty();
var newConferences='';
var placeholder = "{{route('conferences.show', ['id' => '1', 'slug' => 'demo-slug'])}}";
$.each(result, function(index, conference) {
newConferences += '<div>\n' +
' <div>\n' +
' <div>\n' +
' <h5>'+conference.name+'</h5>\n' +
' </div>\n' +
'
' </div></div>';
});
$('#conferences').html(newConferences);
},
error: function(error) {
console.log(error.status)
}
});
});
路线:
Route::get('conferences/where/category/{id}',
'ConferenceController@WhereHasCategory')
->name('category.conferences');
会议获取方式:
public function WhereHasCategory(Request $request)
{
$conferences = Category::find($request->id)->conferences;
return response()->json($conferences);
}
会议模式:
public function categories(){
return $this->belongsToMany('App\Category');
}
和数据透视表结构:
Schema::create('category_conference', function (Blueprint $table) {
$table->increments('id');
$table->integer('conference_id');
$table->integer('category_id');
$table->timestamps();
});
解决方案
代替
$conferences = Category::find($request->id)->conferences;
return response()->json($conferences);
您可以进行以下查询:
$query = Conference::query();
if($request->id){
$query->whereHas('categories', function($q) use($request){
$q->where('categories.id', $request->id);
};
}else{
$query->orderBy('id','desc')->take(8);
}
$conferences = $query->get();
return response()->json($conferences);
还有其他方法可以做到这一点,就像编程中经常出现的情况一样。
另外,您可以简单地return $conferences
,如果我没记错的话,它将被转换为 json :)
推荐阅读
- html - 为什么我的 DIV 会相互重叠?
- typescript - TSC 后静态成员丢失
- java - Dijkstra 算法 Java:总是添加最后一条边而不是最短边
- reactjs - 即使使用 polyfill,React 应用程序也无法在 IE 11 中呈现
- julia - 表达式 eval 中未定义 Julia 局部变量
- python - 选择一个复选框会取消选择 tkinter 中的其他选项
- angular - Webpack 和 Angular:“无法解析相对于 /project/src/foo.component.ts 的资源 ./foo.css”
- javascript - 使用 Vue 和 HTML 在 JavaScript 中制作幻灯片,但图像出现错误 404“未找到”
- google-cloud-platform - 通过 Google IAM 令牌进行自定义 API 访问的工作流程
- python - 将元素添加到 Python Dictionary 是多次添加元素