Как мне составить список значений, которых нет в сводной таблице? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь перечислить значения, которых нет в сводной таблице.

Таблицы - Participantes и Eventos (Участники и события).

Возвращает всех участников в сводной таблице.Таблица.

@foreach ($evento->participantes as $participante)

        <tr value="">
        <td >{{$participante->nombre}}</td>
        <td>{{$participante->apellidos}}</td>
        <td>{{$participante->sexo}}</td>
        <td>{{$participante->categoria->nombre}}</td>
        <td>{{\Carbon\Carbon::parse($participante->fecha_nacimiento)->age}}</td>
        <td>{{$participante->club->nombre}}</td>
        <td>{{$participante->cinturon}}</td>
        <td><input type="checkbox" name="id_participante[]" value="{{$participante->id_participante}}"/></td>
        </tr>
@endforeach

Я думал использовать in_array ().Поэтому я попытался

@foreach ($participantes as $participante)
    @if(in_array($participante,$evento->participante))

Но «$ evento-> Participante» не является массивом, поэтому я попытался -> toArray () .. но он не работает.

Естьмоя модель Evento с "методом участия":

class Evento extends Model
{


    protected $primaryKey = 'id_evento';

    public function participantes(){

        return $this->belongsToMany('App\Participante', 'evento_participante', 'id_evento', 'id_participante' );

    }

}

Спасибо, извините за мой английский.

1 Ответ

0 голосов
/ 05 апреля 2019

отношений в основном возвращает тип данных коллекции.Таким образом, вы можете использовать различные методы сбора данных вместо циклического перебора отношений, что не является лучшим способом оптимизации запросов. Проверьте ссылку на документацию https://laravel.com/docs/5.8/collections

  // find the event 
        $event  = Event::find(1);
        $participant_ids =  $event->participants->pluck('pivot.participant_id')->toArray();

        //finding participants who are not in event
        $not_in_event = Participant::whereNotIn('id',$participant_ids)->get();

        return $not_in_event;
...