Laravel在哪里建立关系

时间:2019-03-31 22:30:21

标签: php laravel laravel-5 eloquent

我正在做一个Laravel应用程序来管理事件。话务员和事件之间具有belongsToMany关系。话务员有多个事件,反之亦然。 枢轴列有一个名为uuid的额外字段,类似于事件的票证ID。 我需要验证活动参加者的入口。因此,话务员会使用数据透视表的uuid扫描QR码。

所以我有这个功能

public function validateTicket(Request $request, $ticket) {
    $event = Event::fromTicket($ticket);
    \Log::info($event);
    return new EventResource($event);
}

静态方法fromTicket是:

public static function fromTicket($ticket) {
    return static::whereHas('attendants', function($q) use ($ticket) {
        $q->where('uuid', $ticket);
    })->first();
}

问题在于我也需要这种关系,这是因为我需要注册话务员的出入时间,并且这种出入可能会发生很多次。

whereHas查询期间是否也有返回关系的方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

否,因为它需要原始模型关系才能获取数据透视表,因此请担心没有与原始模型非常接近的解决方案。相反,请包括所有服务员并在包含中执行一个条件,只有您需要的服务员会在场。

public static function fromTicket($ticket) {
    return static::whereHas('attendants',
        function($query) use ($ticket) {
            $query->where('uuid', $ticket);
        })->with(['attendants' => function ($query) use ($ticket) {
            $query->where('uuid', $ticket);
        }])->first();
}

这将包括服务员,但只有一个具有正确票证的服务员,因此现在您可以进行$event->attendants->first(),这是两个仍然非常优化但不是最佳的查询,这是您描述问题的最简单的解决方案。

相关问题