如何列出不在数据透视表中的值列表?

时间:2019-04-04 15:54:04

标签: laravel list foreach pivot-table

我正在尝试列出不在数据透视表中的值。

这些表是参与者和事件(参与者和事件)。

这将返回数据透视表中的所有参与者。

@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模型带有“ participantes方法”:

class Evento extends Model
{


    protected $primaryKey = 'id_evento';

    public function participantes(){

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

    }

}

谢谢,抱歉我的英语。

1 个答案:

答案 0 :(得分:0)

关系基本上返回集合数据类型。因此,您可以使用各种收集方法来代替遍历关系,这不是优化查询的最佳方法。请查看文档链接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;