我有此代码,因此单击类别时,只会显示属于该单击类别的会议。
工作正常。
但是我还有一个链接“所有类别”,我希望单击该链接时,可以独立于类别来获取最近的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();
});
答案 0 :(得分:0)
代替
$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:)