Панель поиска с таблицами отношений «многие ко многим» - PullRequest
0 голосов
/ 30 мая 2018

У меня есть таблица COIN с полями id и name, у меня также есть таблица EVENT с полями id, title, description.В моем проекте у монеты может быть много событий, а у события может быть много связанных монет, поэтому я создал промежуточную таблицу под названием coin_event.Вопрос в том, как сделать панель поиска, чтобы при выборе в Select2 нужных мне монет я возвращал все события, связанные с выбранными монетами?

У меня есть только драйвер PageController, который будет иметьспособ делать то, что мне нужно, но пока я в подгузниках и не знаю с чего начать.

Я занимаю laravel 5.6

Модель события

public function coins()
{
    return $this->belongsToMany(Coin::class);
}

Миграция монет:

public function up()
{
    Schema::create('coin_event', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('coin_id');
        $table->unsignedInteger('event_id');
        $table->timestamps();
    });
}

Модель монеты

public function events()
{
    return $this->belongsToMany(Event::class);
}

PageController

public function search(Request $request){

    $coins = Coin::findMany($request->coinSearch)->load('events')
                   ->orderBy('event_at', 'DESC')
                   ->where('status', 'APROBADO')
                   ->paginate(8);
    $events = $coins->pluck('events')->collapse();
    return view('welcome', compact('events', 'coins'));

}

Приветствие

<form name="form" method="get" class="form"
      role="form" action="{{ route('search') }}">
   {{csrf_field()}}
   <div class="form-group">
      <select class="select2 select-coin col-12 form-control" 
              id="coinSearch"
              name="coinSearch[]"
              multiple="multiple"
              style="width: 260px;"
              required>
              @foreach ($coins as $coin)
                <option value="{{ $coin->id }}">{{ $coin->coin_name }} 
                </option>
              @endforeach
            </select>
            <button class="btn btn-rounded btn-info">Buscar</button>
         </div>
       </form>
       <div class="row">
           @foreach ($events as $event )
              <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
                  <div class="card text-center">
                      <div class="card-header">
                         <h5><strong>{{ \Carbon\Carbon::parse($event->event_at)->toFormattedDateString() }}</strong> 
                          <a class="reminder" href="#alertReminder" data-toggle="modal" data-target="#alertReminder" data-idevent="13002" data-date="23 May 2018" data-coin="SunContract (SNC)" data-title="Strategic Partnership"><i class="far fa-clock"></i></a>
                    </h5>
                     @foreach ($event->coins as $coin)
                          <h5 style="display: inline;"><strong><span>{{$coin->coin_name}} ({{$coin->coin_symbol}})</span></strong></h5> 
                     @endforeach
                                        <h6>{{$event->title}}</h6>                                          
                                    </div>
                                    <div class="card-body">
                                        <h5 class="card-title"><small>(Publicado: {{ \Carbon\Carbon::parse($event->created_at)->toFormattedDateString() }})</small></h5>
                                        <p class="card-text" >{{$event->description}}</p>
                                        <a class="btn btn-xs btn-outline-primary waves-effect waves-light proof_modal" 
                                            href="{{asset($event->proof)}}">
                                            <span class="btn-label"><i class="fa fa-file-photo-o"></i></span> Prueba
                                        </a>
                                        <a class="btn btn-xs btn-outline-primary waves-effect waves-light" target="_blank" 
                                            href="{{$event->source}}">
                                            <span class="btn-label"><i class="fa fa-external-link-square"></i></span> Fuente
                                        </a>
                                    </div>
                                    <div class="card-footer">
                                        <h6 class="text-footer-card"><small>Publicado por: {{$event->twitter_account}}</small></h6>
                                        @if(empty($event->wallet_address))
                                           <h6 class="text-footer-card"><small>ETH: 0x6e4Cf4b17086cD4Aae40Dbe9cB998d8460F0FbC6</small></h6>
                                        @else
                                           <h6 class="text-footer-card"><small>{{$event->wallet_type}}: {{$event->wallet_address}}</small></h6>
                                        @endif
                                    </div>
                                </div>
                                <br>
                            </div>
                        @endforeach
                    </div>
                        <div class="text-center">
                            {{ $events->links() }}
                        </div>

Пример enter image description here

Приветствие

enter image description here

1 Ответ

0 голосов
/ 30 мая 2018

Попробуйте это:

public function search(Request $request){
    $coins = Coin::whereKey($request->coinSearch)
                   ->orderBy('event_at', 'DESC')
                   ->where('status', 'APROBADO')
                   ->paginate(8);
    $events = $coins->load('events')->pluck('events')->collapse();
    return view('welcome', compact('events', 'coins'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...