我正在做一个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
查询期间是否也有办法返回关系?
提前致谢。
否,因为它需要原始模型关系才能获取数据透视表,因此请担心没有一个与原始模型非常接近的解决方案。而是包括所有服务员并在包含中执行条件,只有您需要的服务员会在场。
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()
,这是两个仍然非常优化但不是最佳的查询,这是您描述问题的最简单的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句