gpt4 book ai didi

php - Laravel whereHas 获取关系

转载 作者:搜寻专家 更新时间:2023-10-31 21:47:26 25 4
gpt4 key购买 nike

我正在做一个 Laravel 应用程序来管理事件。 Attendant 和 Event 具有 belongsToMany 关系。服务员有多个事件,反之亦然。数据透视列有一个名为 uuid 的额外字段,这类似于事件的票证 ID。我需要验证事件服务员的入口。因此,Attendant 使用数据透视表的 uuid 扫描二维码。

所以我有这个功能

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(),这两个查询仍然非常优化但不是针对您描述问题的最佳、最简单的解决方案。

关于php - Laravel whereHas 获取关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55446041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com