首页 > 解决方案 > 独立于会议类别单击“所有类别”时获取会议

问题描述

我有这个代码,这样当一个类别被点击时,它只显示属于该点击类别的会议。

它工作正常。

但我也有一个链接“所有类别”,我希望当单击此链接时,可以独立于类别获得最后 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();
        });

标签: phplaravel

解决方案


代替

$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 :)


推荐阅读