Как отобразить конкретную категорию на основе выбора из выпадающего списка

#laravel

#laravel

Вопрос:

У меня есть таблица категорий и таблица клубов, взаимосвязь между

  • В категории много клубов
  • в 1 категории может быть много клубов
  • у 1 клуба есть 1 категория

Я хочу показывать клубы на основе категории, которая будет выбрана из выпадающего списка, чтобы другие клубы были скрыты. Смотрите скриншот для большего понимания введите описание изображения здесь

  1. Мой контроллер (у меня нет проблем с получением названий категорий в выпадающем списке):
     public function club()
    {
        $categories_name = Category::pluck('category_name','id'); 
        $user_id = auth()->user()->id;
        $user = User::find($user_id);
        $data = array(
            'user_clubs' => $user->clubs,
            'categories_name' => $categories_name
        );
        return view('pages.dashboard.club_dashboard')->with($data);
    }
  
  1. Мое мнение
 <div class="form-group">
        <strong>{{Form::label('categories_name', 'Select Category')}}</strong>
        {{Form::select('categories_name', $categories_name, null, ['class' => 'form-control'], array('name'=>'categories_name[]'))}}
</div>

@if (count($user_clubs)>0)
<table class="table table-striped">
    <tr>

        <th><strong>Club Name</strong></th>
        <th></th>
        <th></th>
    </tr>
    @foreach ($user_clubs as $club)
    <tr>
        <th>{{$club->club_name}} | {{$club->category->category_name}} </th>
        <td><a href="/clubs-soc/lists/{{$club->id}}/edit" class="btn btn-warning">Edit</a></td>
        <td>
            {!!Form::open(['action' => ['ClubsController@destroy', $club->id], 'method' => 'POST', 'class' => 'float-right'])!!} 
            {{Form::hidden('_method','DELETE')}} 
                {{Form::submit('Delete', ['class' => 'btn btn-danger'])}} 
            {!!Form::close()!!}
        </td>
    </tr>
    @endforeach
</table>
@else
<p>You Have No posts</p>
@endif
  

3. Модель категории

 class Category extends Model
{
    public function user(){
        return $this->belongsTo('AppUser');
    }

    public function clubs(){
        return $this->hasMany('AppClub');
    }
}
  

4. Модель клуба

 class Club extends Model
{
    public function user(){
        return $this->belongsTo('AppUser');
    }

    public function category(){
        return $this->belongsTo('AppCategory');
    }
}
  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js>">
    onchange alert($("#categories_name").length);
    console.log($("#categories_name").length);  
    $(document).ready(function(){
        $("#categories_name").on("change", function(){
            var category_id = $(this).val();
            $("table tr").each(function(index){
                if (index != 0) {
                    $row = $(this);
                    if ($row.attr('id')!=category_id) {
                        $row.hide();
                    }
                    else {
                        $row.show();
                    }
                }
            });
        });
    });​
</script>
  

Я написал этот скрипт из ответа ниже, он все еще не работает, пожалуйста, помогите мне найти, где я допустил ошибку? куда я должен поместить скрипт?

Ответ №1:

// добавьте идентификатор категории в свой tr

 @foreach ($user_clubs as $club)
    <tr id="{{$club)->category->id}}">
        //Rest of your code
    </tr>
@endforeach
  

//Ваш jquery

 $("#categories_name").on("change", function() {
    var category_id = $(this).val();

    $("table tr").each(function(index) {
        if (index != 0) {

            $row = $(this);



            if ($row.attr('id')!=category_id) {
                $row.hide();
            }
            else {
                $row.show();
            }
        }
    });
});​
  

Комментарии:

1. Я пробовал, это все еще не работает, не могли бы вы, пожалуйста, указать, куда и как я должен поместить скрипт

2. поместите свой javascript в функцию document.ready, поэтому всякий раз, когда вы меняете категорию из выпадающего списка category, это событие будет вызывать и показывать и скрывать строки соответственно.

3. событие onchange работает или нет? или вообще никогда не вызывался?

4. пожалуйста, проверьте приведенный выше код, я обновил его с помощью скрипта

5. Я спросил вас, вызывалось событие onchange или нет? попробуйте добавить консоль. войдите в систему или предупредите внутри функции onchange и проверьте, запущена она или нет.