#laravel
#laravel
Вопрос:
У меня есть таблица категорий и таблица клубов, взаимосвязь между
- В категории много клубов
- в 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);
}
- Мое мнение
<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 и проверьте, запущена она или нет.