Php 拉威尔,你和谁有关系

Php 拉威尔,你和谁有关系,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我正在做一个Laravel应用程序来管理事件。服务员和活动有着归属关系。服务员有多个事件,反之亦然。 pivot列有一个名为uuid的额外字段,它类似于事件的票证id。 我需要确认一个活动的服务员是否进入。因此,服务员用透视表的uuid扫描二维码 所以我有这个函数 public function validateTicket(Request $request, $ticket) { $event = Event::fromTicket($ticket); \Log::info($

我正在做一个Laravel应用程序来管理事件。服务员和活动有着归属关系。服务员有多个事件,反之亦然。 pivot列有一个名为
uuid
的额外字段,它类似于事件的票证id。 我需要确认一个活动的服务员是否进入。因此,服务员用透视表的
uuid
扫描二维码

所以我有这个函数

public function validateTicket(Request $request, $ticket) {
    $event = Event::fromTicket($ticket);
    \Log::info($event);
    return new EventResource($event);
}
而来自ticket的静态方法是:

public static function fromTicket($ticket) {
    return static::whereHas('attendants', function($q) use ($ticket) {
        $q->where('uuid', $ticket);
    })->first();
}
问题是我也需要这种关系,这是因为我需要登记服务员的入场时间,而这种入场可能会发生很多次

where has
查询期间,是否也有方法返回关系


提前感谢。

否,因为它需要原始模型关系才能获得数据透视表,请不要担心存在与原始模型非常接近的解决方案。取而代之的是,包括所有的护理人员,并在“包括”中做一个条件,只有您需要的护理人员才会在场

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

可能有助于这项工作的完美,我认为这是解决方案,但我仍然,不知道是否有更理想的解决方案。谢谢你的回答,我正在使用它,解决我的问题效果很好。我不知道,这一切仍然在一个查询中完成,将称之为99%优化。这是我们在与orm合作时必须做出的牺牲